在运行时传递数据上创建控件

本文关键字:创建 控件 数据 运行时 | 更新日期: 2023-09-27 17:57:43

在Windows窗体项目中,我使用此方法来设置动态创建的控件的一些属性。在这种情况下,当用户将鼠标悬停在工具提示上时,我还需要显示工具提示。这很好,除了一件事,我不知道如何将w["text"]的值传递给control_MouseEnter。

private void SetProp(ref Control obiekt, Dictionary<string, string> w)
    {
        obiekt.Name = w["id"];
        obiekt.Location = new Point(Convert.ToInt16(w["wspx"]), Convert.ToInt16(w["wspy"]));
        obiekt.Height = Convert.ToInt16(w["wys"]);
        obiekt.Width = Convert.ToInt16(w["szer"]);
        if (w["text"] != "")
        {
            obiekt.MouseEnter += new EventHandler(control_MouseEnter);
            obiekt.MouseLeave += new EventHandler(control_MoouseLeave);
        }
    }
private void control_MouseEnter(object sender, EventArgs e)
    {
        toolTip.Show("how to pass a value here ??", (Control)sender, 5000);
    }

在运行时传递数据上创建控件

我不知道必须将w["text"]的值传递给control_MouseEnter。

您可以直接(例如通过control.Tag属性)或间接(例如通过全局变量/字典)将数据与目标控件链接,也可以使用匿名委托和闭包创建本地数据上下文:

obiekt.MouseEnter += (s,e) => { 
    tooltip.Show(w["text"], (Control)s, 5000);
};

有没有办法以某种方式使用EventArgs?

不,你不能。因为args是在鼠标事件发生的那一刻在Control的代码中实例化的,并且您不能从事件订阅点控制EventArgs的创建。

将文本设置为Control对象的Tag成员怎么样?

类似于object.Tag = w["text"];,并用事件处理程序

显示