2016-08-12 62 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。