c# - 用户控制自定义事件并设置获取属性

标签 c# winforms user-controls

我在用户控件中有 2 个标签和一个属性: 这是属性:

private int _SelectIndex;
[Browsable(true)]
public int SelectIndex { get; set; }

和 2 个标签:

Label lbl1, lbl2;
void iControl()
{
      lbl1 = new Label();
      lbl2 = new Label();
      lbl1.Name = "lbl1";
      lbl2.Name = "lbl2";
      lbl1.Click += lbl_Click;
      lbl2.Click += lbl_Click;
      this.Controls.Add(lbl1);
      this.Controls.Add(lbl2);
}

点击:

void lbl_Click(object sender, EventArgs e)
{
    Label selectedlbl = sender as Label;
    if(selectedlbl.Name == "lbl1") 
          this.Select = 1;
    else
          this.Select = 2;
} 

类(class)事件:

public class SelectEventArgs : EventArgs
{
  private int index;
  public SelectEventArgs(int index)
  {
     this.index = index;
  }

  public int ItemIndex
  {
    get
    {
      return index;
    }
  }
}

我的控件中的自定义事件:

public event EventHandler SelectEvent;
protected virtual void OnSelectEvent()
{
  if (SelectEvent!= null)
    SelectEvent(this, new SelectEventArgs(this._SelectIndex));
}

我需要一个事件来获取和设置 MainForm 中的属性值,如下所示:

int index = 0;
public Form1()
{
  InitializeComponent();
  this.icontrol = new iControl();
  this.SelectEvent += Select();
}

void Select(object sender, SelectItem e)
{
   //use this to set value of Select
   this.icontrol.SelectIndex = index;
   //and this to get value of Select
   index = this.icontrol.SelectIndex;
}

选择为空。 如何让它发挥作用?

最佳答案

我在这里发布以供任何需要它的人:
1.声明一个委托(delegate):

public delegate void SelectIndexEventHandler(object sender, SelectEventArgs e);
public class SelectEventArgs : EventArgs
{
  private int index;
  public SelectEventArgs(int index)
  {
    this.index = index;
  }

  public int ItemIndex
  {
    get { return index; }
    set { index = value; }
  }
}

2.声明一个事件 SelectIndexChanged 和一个方法 OnSelectIndexChanged:

public event SelectIndexEventHandler SelectIndexChanged;
protected virtual void OnSelectIndexChanged(SelectEventArgs e)
{
   if (SelectIndexChanged != null)
      SelectIndexChanged(this, e);
}

3.在setter中调用:

public int SelectIndex
{
   get { return _SelectIndex; }
   set { 
     _SelectIndex = value;
     OnSelectIndexChanged(new SelectEventArgs(value)); 
   }
}

然后是MainForm:

this.gListBox1.SelectIndexChanged += icontrol_SelectIndexChanged;
void icontrol_SelectIndexChanged(object sender, SelectEventArgs e)
{
   var current = e.ItemIndex;
}

再次感谢 jbmintjb Reza Aghaei。

关于c# - 用户控制自定义事件并设置获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38919082/

相关文章:

c# - 可为空的可选参数

c# - 如何在自定义控件中启用设计支持?

c# - 用户控件内的公共(public)方法 c# .net

c# - 在 "inner"用户控件上使用 Caliburn.Micro 绑定(bind)功能

c# - MEF + WCF 服务主机?

c# - 向类的每个属性添加附加属性

c# 正则表达式在一些 html 标签中

c# - 如何防范 NHibernate 不完整映射

winforms - 单击外部时如何从 Infragistics ultragrid 单元中移除焦点?

c# - 是否有任何事件表明所有依赖属性都已加载?