實現(xiàn)有問題。在這里,C不需要實現(xiàn) IEquatableC, 因為Except方法默認情況下調(diào)用的是 object 的 Equals 方法,而不是這個接口的方法。C改成如下內(nèi)容即可:
創(chuàng)新互聯(lián)2013年開創(chuàng)至今,先為宣恩等服務(wù)建站,宣恩等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為宣恩企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
public?class?C
{
public?string?S;
public?override?bool?Equals(object?other)
{
if(other==null)return?false;
if(other.GetType()!=GetType())return?false;
if(other==this)return?true;
return?((C)other).S.Equals(S);
}
public?override?int?GetHashCode()
{
return?S.GetHashCode();
}
}
另外GetHashCode重寫是一個建議,不是必須的,所以不會出錯。
對于窗體中的容器控件,比如 GroupBox,Panel 等,它僅僅訪問了這些控件本身,而不會去訪問它們的子控件。為了實現(xiàn)你所要求的功能,需要將上述代碼修改:
Public Sub IterateThroughControls(ByVal parent As Control)
For Each c As Control In parent.Controls
MessageBox.Show(c.ToString())
If c.HasChildern Then
'利用遞歸實現(xiàn)容器子控件的訪問,重復(fù)循環(huán)遍歷控件,調(diào)用自身函數(shù)
IterateThroughControls(c)
End If
Next
End Sub
調(diào)用方法:
IterateThroughControls(TabControl1) 'tabcontrol1為控件名,也可用groupbox1等
此外,判斷遍歷的控件是不是相應(yīng)的文本控件,或者combobox控件,可用此代碼判斷
For Each t As Control In Me.Controls
If TypeOf t Is TextBox Then
MsgBox(t)
End If
Next
Private Sub b_click(sender As Object, e As EventArgs)
MsgBox(sender.name)
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim b() As Button = {Button1, Button2, Button3}
For Each i In b
AddHandler i.Click, AddressOf b_click
Next
End Sub