winforms C# -如何在另一个窗体上使用UserControl事件

nwo49xxi  于 2022-11-17  发布在  C#
关注(0)|答案(2)|浏览(168)

我已经用DataGridView创建了一个UserControl。在我的代码中,我将这个UserControl添加到Form上的TabControl-TabPage。这样做效果很好。
现在,我想双击UserControlDataGridView,选择该行作为对象,并在另一个TabPage(位于初始Form上)上使用此数据。
如何访问Form上的UserControl活动?
我试过那样做(第一个答案)How to use UserControl,但我不能在我的Form上使用它。所以这是行不通的。
又如何做一个DataGridViewCellEvent来使用呢?
编辑:我现在尝试以下方式:使用者控件:

public partial class ucData : UserControl
    {
        public ucData(string Number)
        {
            InitializeComponent();
public string Data
        {
            get { return textBox1.Text; }
            set { textBox1.Text = value; }
        }
        public event EventHandler DataAvailable;
        /// <summary>
        /// Called to signal to subscribers that new data is available
        /// </summary>
        /// <param name="e"></param>
        protected virtual void OnDataAvailable(EventArgs e)
        {
            EventHandler eh = DataAvailable;
            if (eh != null)
            {
                eh(this, e);
            }
        }
....

...
private void dataGridView_CellDoubleClick(object sender, EventArgs e)
        {
            OnDataAvailable(null);
        }

在我的主表单上:

...
 void Test()
        {
            UserControls.ucData uc = new ucData(null);
            uc.DataAvailable += new EventHandler(child_DataAvailable);
            uc.Data = "Hello!";
        }
        void child_DataAvailable(object sender, EventArgs e)
        {
            UserControls.ucData child = sender as UserControls.ucData;
            if (child != null)
            {
                MessageBox.Show(child.Data);
            }
        }
...

但是如果我双击用户控件,就不会出现MessageBox。为什么?出了什么问题?有人能帮忙吗?

wecizke3

wecizke31#

试试看:

用户控件

public partial class UserControl1: UserControl
{
    public event DataGridViewCellEventHandler dataGridView1_CellDoubleClickEvent;

    public UserControl1()
    {
        InitializeComponent();
    }

    private void UserControl1_Load(object sender, EventArgs e)
    {
        this.dataGridView1.CellDoubleClick += dataGridView1_CellDoubleClickEvent;
    }

    private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
        dataGridView1_CellDoubleClickEvent?.Invoke(this.dataGridView1, e);
    }
}

表格

private void Form1_Load(object sender, EventArgs e)
    {
        userControl11.dataGridView1_CellDoubleClickEvent += new DataGridViewCellEventHandler(dataGridView1_CellDoubleClick);
     }        

    private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
        //Your code for the "dataGridView_CellDoubleClick" event
    }
6ie5vjzr

6ie5vjzr2#

public class CustomerRepository : ICustomerRepository
{
    public IEnumerable<Customer> GetAllCustomer()
    {
        using (IDbConnection db = new MySqlConnection(AppConnection.ConnectionString))
        {
            string q = @"SELECT ....";
            return db.Query<Customer>(q, commandType: CommandType.Text);
        }
    }
}

我使用 UserControl 中的存储库来显示所有数据。
错误消息:系统.空引用异常:对象引用未设置为对象的示例。... AppConnection.. cctor()
这里是我的AppConnection:

public static class AppConnection
{
    public static string ConnectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
}

相关问题