我需要一种将用户控件传递给用户控件的方法。
我正在使用Windows窗体。
例如。假设我在用户控制1中有一个无线电按钮,我希望用户控制2呼叫并查看该无线电按钮是否在用户控制1上被检查。我将如何引用它?
对于一些示例代码:
我是UserControl1
public void radioButton1_CheckedChanged(object sender, EventArgs e)
{
}我是UserControl2
private void button4_Click(object sender, EventArgs e)
{
if (radioButton1.Checked)
//do something
else
//do something
}发布于 2017-01-18 22:43:49
您的表单上似乎有两个不相关的用户控件。UserControl2 (UC2)应该改变它的行为是发生在UserControl1 (UC1)上的事情。这意味着您应该在UC1上有一个事件,如果radiobutton1选中状态更改,该事件将触发。你也需要暴露无线电按钮的状态。您可以使用自定义EventArgs或公共属性来完成此操作:
UserControl1
public event EventHandler SomethingChanged;
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
if (SomethingChanged != null)
SomethingChanged(this, EventArgs.Empty);
}
public bool IsSomethingEnabled => radioButton1.Checked;UC2应该允许改变它的行为。这可以用公共财产来完成
UserControl2
public bool UseCoolFeature { get; set; }
private void button4_Click(object sender, EventArgs e)
{
if (UseCoolFeature)
//do something
else
//do something else
}最后一步协调器,它将管理两个用户控件。这是你的表格。从UC1订阅事件和更改UC2状态:
表格
private void userControl1_SomethinChanged(object sender, EventArgs e)
{
userControl2.UseCoolFeature = ((UserControl1)sender).IsSomethingEnabled;
}您甚至可以使用就地事件处理程序:
userControl1.SomethingChanged += (s,e) =>
userControl2.UseCoolFeature = userControl1.IsSomethingEnabled;发布于 2017-01-18 22:46:01
您可以将值存储在会话中:
UserControl1
public void radioButton1_CheckedChanged(object sender, EventArgs e)
{
Session["radioButton1Checked"] = radioButton1.Checked;
}UserControl2
private void button4_Click(object sender, EventArgs e)
{
if (Session["radioButton1Checked"] != null && (bool)Session["radioButton1Checked"])
//do something
else
//do something
}https://stackoverflow.com/questions/41730759
复制相似问题