2016-08-12 63 views
3

我有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; 
} 

上课活动:

在我的控制
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; 
} 

选择是空的。 如何让它工作?

+0

什么部分是在这里失败,通过它的外观这将工作。 – jbmintjb

+0

我不知道我可以添加一个事件为[email protected] – Jandy

+0

啊列表框,没有提及那一个!我的答案如下。 – jbmintjb

回答

0

看看在ListBox控件SelectedIndexChanged事件,认为这是你在找什么

+0

哦!我需要一个事件SetSelected.But但我不知道如何获取它@ jbmintjb – Jandy

+1

https://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.setselected(v= vs.110).aspx – jbmintjb

+0

谢谢!我试图在我的控制中获得选定的标签。但我不能。请查看我更新的@ jbmintjb – Jandy

1

的代码有多个问题。考虑到这些技巧来解决的问题:

  1. SelecetEvent简化版,属于Form。该活动属于icontrol

  2. this.SelectEvent += Select();不正确,你应该使用:

    icontrol.SelectEvent += Select; 
    
  3. 当你有一个自定义事件参数,你应该定义的事件是这样的:

    public event EventHandler<SelectEventArgs> SelectEvent; 
    
  4. 你应该引发事件在你的财产的二传手中,使用你创建的OnSelectEvent方法。

要了解有关事件的更多信息,请参阅C# Handling and Raising Events

+0

感谢您的建议。仍然没有._SelectIndex是空的@ Reza Aghaei – Jandy

+0

EventHandler。谢谢你Reza Aghaei。创建一个方法virtual void OnSelectIndexChanged并在selectIndex setter中调用它:OnSelectIndexChanged(new SelectEventArgs(value));它工作! @Reza Aghaei – Jandy

+0

不客气:)'OnSelectIndexChanged'没有必要,你的活动就够了。我给答案增加了另一条小贴士。 –

1

我张贴在这里,任何一个需要它:
1.Declare委托:

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.Call它in 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。