• WinForm查看SQL Server所有数据库表信息小工具


    闲来无事,利用WinForm做了个查看SQL Server所有数据库表信息的小工具。

    总结一下:

    1、只允许运行应用程序的一个实例

    View Code
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main()
    {
    bool createNew;
    try
    {
    using (System.Threading.Mutex m = new System.Threading.Mutex(true, "Global\\" + Application.ProductName, out createNew))
    {
    if (createNew)
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(
    false);
    Application.Run(
    new Form1());
    }
    else
    {
    MessageBox.Show(
    "Only one instance of this application is allowed!");
    }
    }
    }
    catch
    {
    MessageBox.Show(
    "只允许运行该应用程序的一个实例!");
    }
    }

    2、给ComboBox添加项

    View Code
    /// <summary>
    /// 选择项类,用于ComboBox或者ListBox添加项
    /// </summary>
    public class ListItem
    {
    public ListItem(string sid, string sname)
    {
    ID
    = sid;
    Name
    = sname;
    }
    public override string ToString()
    {
    return this.Name;
    }
    public string ID { get; set; }
    public string Name { get; set; }
    }
    //使用:
    cboLoginType.Items.Add(new Comm.ListItem("0", "Windows 身份验证"));
    cboLoginType.Items.Add(
    new Comm.ListItem("1", "SQL Server 身份验证"));

    3、窗体传值

    View Code
    //利用构造方法,LoginFM窗体传值给MainFM窗体

    //LoginFM.cs代码:
    MainFM f1 = new MainFM(txtServerName.Text.Trim());
    f1.Show();

    //MainFM.cs代码:
    public MainFM()
    {
    InitializeComponent();
    }
    public MainFM(string name)
    :
    this()
    {
    serverName
    = name;
    }

    4、窗体伸缩时控制窗体内控件按比例自动伸缩

    View Code
    public MainFM(string name)
    :
    this()
    {
    serverName
    = name;
    SetControlWH(
    this);
    }
    private void MainFM_Resize(object sender, EventArgs e)
    {
    SetControl2(
    this);
    }
    double formoldwidth; //窗体原始宽度
    double formoldheight; //窗体原始高度
    private void SetControlWH(Control c)
    {
    double scalewh; //控件宽高比
    formoldwidth = (double)this.Width;
    formoldheight
    = (double)this.Height;
    foreach (Control ctrl in c.Controls)
    {
    scalewh
    = (double)ctrl.Width / (double)ctrl.Height;
    ctrl.Tag
    = ctrl.Left + " " + ctrl.Top + " " + ctrl.Width
    + " " + scalewh.ToString() + " "; //将控件的Left,Top,Width,宽高比放入控件的Tag内

    if (ctrl != null)
    SetControlWH(ctrl);
    }
    }
    private void SetControl2(Control c)
    {
    double scalex; //水平伸缩比
    double scaley; //垂直伸缩比
    long i;
    int temppos;
    string temptag;
    double[] pos = new double[4];
    //pos数组保存当前控件的left,top,width,height
    scalex = (double)this.Width / formoldwidth;
    scaley
    = (double)this.Height / formoldheight;
    foreach (Control ctrl in c.Controls)
    {
    temptag
    = ctrl.Tag.ToString();
    for (i = 0; i <= 3; i++)
    {
    temppos
    = temptag.IndexOf(" ");
    if (temppos > 0)
    {
    pos[i]
    = Convert.ToDouble(temptag.Substring(0,
    temppos));
    //从Tag中取出参数
    temptag = temptag.Substring(temppos + 1);
    }
    else
    pos[i]
    = 0;
    }
    ctrl.Left
    = (int)(pos[0] * scalex);
    ctrl.Top
    = (int)(pos[1] * scaley);
    ctrl.Width
    = (int)(pos[2] * scalex);
    ctrl.Height
    = (int)((double)ctrl.Width / pos[3]);
    //高度由宽高比算出
    SetControl2(ctrl);
    }
    }

    5、设置DataGridView行变色

    View Code
    private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {
    for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
    {
    if (i % 2 == 0)
    {
    this.dataGridView1.Rows[i].DefaultCellStyle.BackColor = System.Drawing.SystemColors.Info;//背景颜色
    this.dataGridView1.Rows[i].DefaultCellStyle.ForeColor = System.Drawing.Color.Green;//字体颜色
    }
    this.dataGridView1.Rows[i].DefaultCellStyle.SelectionBackColor = System.Drawing.Color.Green;//选择行的颜色
    }
    }

    6、让TreeView的节点不管有没子节点都默认“+”号:

    View Code
    private void InitTreeList(DataTable dataTable)
    {
    this.treeView1.ImageIndex = 0;
    TreeNode root
    = new TreeNode(serverName, 0, 0);
    foreach (System.Data.DataRow row in dataTable.Rows)
    {
    TreeNode node
    = new TreeNode(row["name"].ToString(),1,1);
    node.Tag
    = row["name"].ToString();
    //以下生成一个子节点以让节点显示“+”号
    TreeNode n = new TreeNode("n");
    node.Nodes.Add(n);
    root.Nodes.Add(node);
    }
    this.treeView1.Nodes.Add(root);
    this.treeView1.Nodes[0].Expand();
    }
    //选择节点时再生成子节点数据
    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
    {
    //其它代码.....
    //点击“+”号生成节点数据时先删除原先的子节点
    if (this.treeView1.SelectedNode.Nodes.Count > 0)
    {
    this.treeView1.SelectedNode.Nodes.Clear();
    }
    //其它代码.....
    }

    7、设置TreeView点击节点前面“+”、“-”号自动选择相应节点

    View Code
    private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
    {
    SetSelectNode(e.Node);
    }
    private void treeView1_AfterCollapse(object sender, TreeViewEventArgs e)
    {
    SetSelectNode(e.Node);
    }
    private void SetSelectNode(TreeNode tn)
    {
    if (tn == null)
    return;
    if (tn.Tag == null)
    return;
    treeView1.SelectedNode
    = tn;
    }

    8、窗体监听热键

    View Code
    private void MainFM_Activated(object sender, EventArgs e)
    {
    HotKey.RegisterHotKey(Handle,
    100, HotKey.KeyModifiers.None, Keys.F5);
    }
    private void MainFM_Leave(object sender, EventArgs e)
    {
    HotKey.UnRegisterHotKey(Handle,
    100);
    }
    /// <summary>
    /// 监视Windows消息,重载WndProc方法,用于实现热键响应
    /// </summary>
    /// <param name="m"></param>
    protected override void WndProc(ref Message m)
    {
    const int WM_HOTKEY = 0x0312;
    switch (m.Msg)
    {
    case WM_HOTKEY:
    switch (m.WParam.ToInt32())
    {
    case 100:
    //这里快捷键响应代码
    //......
    break;
    }
    break;
    }
    base.WndProc(ref m);
    }

    9、点击窗体右上角“关闭”按钮时最小化并托盘提示信息

    View Code
    /*
    (1)在窗体设计界面添加一个NotifyIcon控件notifyIcon1,添加一个ContextMenuStrip控件contextMenuStrip1;
    (2)设置notifyIcon1的ContextMenuStrip属性为contextMenuStrip1、为Icon属性添加一个图标文件;
    (3)在contextMenuStrip1的Items属性中添加两个菜单选项toolStripMenuItem_Show和toolStripMenuItem_Exit,名称分别为“打开”和“退出”;
    下面为事件
    */
    //点击窗体右上角“关闭”按钮时最小化并托盘提示信息
    private void MainFM_FormClosing(object sender, FormClosingEventArgs e)
    {
    e.Cancel
    = true; // 取消关闭窗体
    this.Hide();
    this.notifyIcon1.Visible = true;//显示托盘图标
    this.notifyIcon1.Text = "打开程序";
    notifyIcon1.ShowBalloonTip(
    3000, "程序最小化提示", "程序已经缩小到托盘,打开窗口请双击图标即可。", ToolTipIcon.Info);
    }
    //双击打开程序
    private void notifyIcon1_DoubleClick(object sender, EventArgs e)
    {
    ShowForm();
    }
    //右键点击“打开”打开程序
    private void toolStripMenuItem_Show_Click(object sender, EventArgs e)
    {
    ShowForm();
    }
    //右键点击“退出”退出程序
    private void toolStripMenuItem_Exit_Click(object sender, EventArgs e)
    {
    this.ShowInTaskbar = false;
    Application.Exit();
    }
    private void ShowForm()
    {
    this.Show();
    if (this.WindowState == FormWindowState.Minimized)
    this.WindowState = FormWindowState.Normal;
    this.Activate();
    }
  • 相关阅读:
    [CF1076D] Edge Deletion
    [CF1081D] Maximum Distance
    [CF1095F] Make It Connected
    [CF1328E] Tree Queries
    [CF1328F] Make k Equal
    Codeforces Round #629 (Div. 3) 总结
    [CF1131D] Gourmet choice
    [CF1176D] Recover it!
    [CF1205B] Shortest Cycle
    [CF1213G] Path Queries
  • 原文地址:https://www.cnblogs.com/gdjlc/p/2086866.html
Copyright © 2020-2023  润新知