在运行时传递数据上创建控件
本文关键字:创建 控件 数据 运行时 | 更新日期: 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"];
,并用事件处理程序