我有一个自定义用户控件,我想做一些相对简单的事情。
当usercontrol的值发生变化时,如果数字向上变化,请让主窗体更新显示窗口。
如果NUD不在用户控件中,这不是问题,但我似乎无法弄清楚如何使用mainform而不是用户控件来处理事件。
答案 0 :(得分:118)
您需要为触发用户控件中的事件时引发的用户控件创建事件处理程序。这将允许您将事件冒泡到链中,以便您可以从表单处理事件。
点击UserControl上的Button1
,我会在表单上触发Button1_Click
触发UserControl_ButtonClick
:
用户控制:
public event EventHandler ButtonClick;
protected void Button1_Click(object sender, EventArgs e)
{
//bubble the event up to the parent
if (this.ButtonClick!= null)
this.ButtonClick(this, e);
}
形式:
UserControl1.ButtonClick += new EventHandler(UserControl_ButtonClick);
protected void UserControl_ButtonClick(object sender, EventArgs e)
{
//handle the event
}
答案 1 :(得分:19)
尝试映射它。请尝试将此代码放入UserControl
:
public event EventHandler ValueChanged {
add { numericUpDown1.ValueChanged += value; }
remove { numericUpDown1.ValueChanged -= value; }
}
然后,您的UserControl
将出现ValueChanged
控件通常会看到的NumericUpDown
事件。
答案 2 :(得分:11)
你可以这样做.....下面的例子显示文本框(用户控件)值已更改
// Declare a delegate
public delegate void ValueChangedEventHandler(object sender, ValueChangedEventArgs e);
public partial class SampleUserControl : TextBox
{
public SampleUserControl()
{
InitializeComponent();
}
// Declare an event
public event ValueChangedEventHandler ValueChanged;
protected virtual void OnValueChanged(ValueChangedEventArgs e)
{
if (ValueChanged != null)
ValueChanged(this,e);
}
private void SampleUserControl_TextChanged(object sender, EventArgs e)
{
TextBox tb = (TextBox)sender;
int value;
if (!int.TryParse(tb.Text, out value))
value = 0;
// Raise the event
OnValueChanged( new ValueChangedEventArgs(value));
}
}
答案 3 :(得分:0)
其中一个简单的方法是使用landa函数,没有像
这样的问题userControl_Material1.simpleButton4.Click += (s, ee) =>
{
Save_mat(mat_global);
};
答案 4 :(得分:0)
对于那些希望在VB中执行此操作的人,这是我如何使用复选框的方法。
背景:我正在尝试制作自己的复选框,即滑块/开关控件。我只包含了该问题的相关代码。
<asp:CheckBox ID="checkbox" runat="server" AutoPostBack="true" />
创建一个EventHandler(OnCheckChanged)。当事件在用户控件(MyCheckBox.ascx)内的控件(ID =“ checkbox”)上触发时,则触发EventHandler(OnCheckChanged)。
Public Event OnCheckChanged As EventHandler
Private Sub checkbox_CheckedChanged(sender As Object, e As EventArgs) Handles checkbox.CheckedChanged
RaiseEvent OnCheckChanged(Me, e)
End Sub
<uc:MyCheckbox runat="server" ID="myCheck" OnCheckChanged="myCheck_CheckChanged" />
注意:直到我在下面添加 Handles 子句
后,myCheck_CheckChanged才触发Protected Sub myCheck_CheckChanged (sender As Object, e As EventArgs) Handles scTransparentVoting.OnCheckChanged
'Do some page logic here
End Sub