• 【winform】userControl刷新父窗体的datagridview


    1.ContextMenuStrip 获取右键控件名称

    this.contextMenuScriptScore.SourceControl.Name; //当前控件名
    

    2.radiobutton 分组

    放入一个Panel里面。

    例如,放入一直flowLayoutPanel里

    3.动态生成一个Label,放入flowLayoutPanel里。

     private void AddLable(int number, string text )
            {
                Label lable = new Label();
                lable.Name = "lab_tgt_word_" + number;
                lable.Text = text;
                lable.AutoSize = true;
                lable.BorderStyle = BorderStyle.FixedSingle;
                lable.Size = new Size(50, 50);
                lable.Margin = new Padding(0, 0, 10, 20);
                lable.Location = new Point(this.flowLayoutPanel2.Size);
                lable.ContextMenuStrip = contextMenuScriptScore;        //右键菜单
                this.flowLayoutPanel2.Controls.Add(lable);
            }
    

    4.用户控件(userControl)刷新父窗体的datagridview

    //2.userControl刷新父窗体 datagridview
    var mainForm = (Main)this.Parent;
    DataTable table = (DataTable)mainForm.dataGridView1.DataSource;
    table.Rows[tableJson.ID - 1]["tgt_len_compute"] = tableJson.TgtLenCompute.ToString();
    mainForm.dataGridView1.DataSource = table;
    

    5.datagridview导出excel,去掉一列,不改变datagridview

    DataGridView dgv = this.dataGridView1;
    DataTable dataTable = (DataTable)dgv.DataSource;
    //必须copy,才不会改变datagridview的绑定源
    DataTable datatableCopy = dataTable.Copy();
    datatableCopy.Columns.Remove("ID");
     string sheetName = datatableCopy.Rows[0][0].ToString().ToUpper() + "&" + datatableCopy.Rows[0][1].ToString().ToUpper();
                    ExcelHelper.ExportToExcel(datatableCopy, sheetName, saveFileDialog1.FileName);
     ExcelHelper.ExportToExcel(datatableCopy, sheetName, saveFileDialog1.FileName);
    

    6.自定义MessageBox 按钮的文本

    使用

    DialogResult dialog = MessageBoxEx.Show("does it load directly or does it recalculate?", "hint", MessageBoxButtons.YesNo, new String[] { "load", "recalculate" });
    

    代码

    using System;
    using System.Drawing;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Windows.Forms;
     
     
    namespace Sphinx.Utils
    {
        public class MessageBoxEx
        {
            public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, string[] buttonTitles)
            {
                MessageForm frm = new MessageForm(buttons, buttonTitles);
                frm.Show();
                frm.WatchForActivate = true;
                DialogResult result = MessageBox.Show(frm, text, caption, buttons);
                frm.Close();
     
                return result;
            }
     
            public static DialogResult Show(string text, string caption, MessageBoxButtons buttons,
                MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, string[] buttonTitles)
            {
                MessageForm frm = new MessageForm(buttons, buttonTitles);
                frm.Show();
                frm.WatchForActivate = true;
                DialogResult result = MessageBox.Show(frm, text, caption, buttons, icon, defaultButton);
                frm.Close();
     
                return result;
            }
     
            class MessageForm : Form
            {
                IntPtr _handle;
                MessageBoxButtons _buttons;
                string[] _buttonTitles = null;
     
                bool _watchForActivate = false;
     
                public bool WatchForActivate
                {
                    get { return _watchForActivate; }
                    set { _watchForActivate = value; }
                }
     
                public MessageForm(MessageBoxButtons buttons, string[] buttonTitles)
                {
                    _buttons = buttons;
                    _buttonTitles = buttonTitles;
     
                    // Hide self form, and don't show self form in task bar.
                    this.Text = "";
                    this.StartPosition = FormStartPosition.CenterScreen;
                    this.Location = new Point(-32000, -32000);
                    this.ShowInTaskbar = false;
                }
     
                protected override void OnShown(EventArgs e)
                {
                    base.OnShown(e);
                    // Hide self form, don't show self form even in task list.
                    NativeWin32API.SetWindowPos(this.Handle, IntPtr.Zero, 0, 0, 0, 0, 659);
                }
     
                protected override void WndProc(ref System.Windows.Forms.Message m)
                {
                    if (_watchForActivate && m.Msg == 0x0006)
                    {
                        _watchForActivate = false;
                        _handle = m.LParam;
                        CheckMsgbox();
                    }
                    base.WndProc(ref m);
                }
     
                private void CheckMsgbox()
                {
                    if (_buttonTitles == null || _buttonTitles.Length == 0)
                        return;
     
                    // Button title index
                    int buttonTitleIndex = 0;
                    // Get the handle of control in current window.
                    IntPtr h = NativeWin32API.GetWindow(_handle, GW_CHILD);
     
                    // Set those custom titles to the three buttons(Default title are: Yes, No and Cancle).
                    while (h != IntPtr.Zero)
                    {
                        if (NativeWin32API.GetWindowClassName(h).Equals("Button"))
                        {
                            if (_buttonTitles.Length > buttonTitleIndex)
                            {
                                // Changes the text of the specified window's title bar (if it has one). 
                                // If the specified window is a control, the text of the control is changed. 
                                // However, SetWindowText cannot change the text of a control in another application.
                                NativeWin32API.SetWindowText(h, _buttonTitles[buttonTitleIndex]);
     
                                buttonTitleIndex++;
                            }
                        }
     
                        // Get the handle of next control in current window.
                        h = NativeWin32API.GetWindow(h, GW_HWNDNEXT);
                    }
                }
            }
     
     
            public const int GW_CHILD = 5;
            public const int GW_HWNDNEXT = 2;
     
            public class NativeWin32API
            {
                [DllImport("user32.dll", CharSet = CharSet.Auto)]
                public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int Width, int Height, int flags);
                [DllImport("user32.dll")]
                public static extern IntPtr GetWindow(IntPtr hWnd, Int32 wCmd);
                [DllImport("user32.dll")]
                public static extern bool SetWindowText(IntPtr hWnd, string lpString);
                [DllImport("user32.dll")]
                public static extern int GetClassNameW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpString, int nMaxCount);
     
                public static string GetWindowClassName(IntPtr handle)
                {
                    StringBuilder sb = new StringBuilder(256);
     
                    // Retrieves the name of the class to which the specified window belongs
                    GetClassNameW(handle, sb, sb.Capacity);
                    return sb.ToString();
                }
            }
     
        }
     
    }
    
  • 相关阅读:
    python map 详解
    python 中的集合(set) 详解
    python中的列表(list) 切片详解
    django 创建数据库表 命令
    django如何检查创建的模型(model)是否有语法错误或者逻辑错误
    python 列表(list)去除重复的元素总结
    python中的 zip函数详解
    django post和get 比较
    正则表达式的特殊符号和字符详细解析
    .NET/MVC-发布到IIS6.1提示未能加载程序集System.Web.Http.WebHost
  • 原文地址:https://www.cnblogs.com/tangge/p/10368549.html
Copyright © 2020-2023  润新知