天天看點

WinForm容器内控件批量效驗是否允許為空?設定是否隻讀?設定是否可用等方法分享

WinForm容器内控件批量效驗是否允許為空?設定是否隻讀?設定是否可用等方法分享

  在WinForm程式中,我們有時需要對某容器内的所有控件做批量操作、如批量判斷是否允許為空?批量設定為隻讀、批量設定為可用或不可用等常用操作,本文分享這幾種方法,起抛磚引玉的作用,歡迎讨論!

<a href="http://blog.51cto.com/yonghu/1683244#">?</a>

<code>        </code><code>/// &lt;summary&gt;</code>

<code>        </code><code>/// 清除容器裡面指定控件的值(通過控件的AccessibleName屬性設定為"EmptyValue")</code>

<code>        </code><code>/// &lt;/summary&gt;</code>

<code>        </code><code>/// &lt;param name="parContainer"&gt;容器控件&lt;/param&gt;</code>

<code>        </code><code>public</code> <code>static</code> <code>void</code> <code>EmptyControlValue(Control parContainer)</code>

<code>        </code><code>{</code>

<code>            </code><code>for</code> <code>(</code><code>int</code> <code>index = 0; index &lt; parContainer.Controls.Count; index++)</code>

<code>            </code><code>{</code>

<code>                </code><code>//如果是容器類控件,遞歸調用自己</code>

<code>                </code><code>if</code> <code>(parContainer.Controls[index].HasChildren &amp;&amp; !parContainer.Controls[index].GetType().Name.ToLower().StartsWith(</code><code>"uc"</code><code>))</code>

<code>                </code><code>{</code>

<code>                    </code><code>EmptyControlValue(parContainer.Controls[index]);</code>

<code>                </code><code>}</code>

<code>                </code><code>else</code>

<code>                    </code><code>if</code> <code>(parContainer.Controls[index].AccessibleName == </code><code>null</code> <code>||</code>

<code>                        </code><code>!parContainer.Controls[index].AccessibleName.ToLower().Contains(</code><code>"emptyvalue"</code><code>))</code>

<code>                    </code><code>{</code>

<code>                        </code><code>continue</code><code>;</code>

<code>                    </code><code>}</code>

<code>                    </code><code>switch</code> <code>(parContainer.Controls[index].GetType().Name)</code>

<code>                        </code><code>case</code> <code>"Label"</code><code>:</code>

<code>                            </code><code>break</code><code>;</code>

<code>                        </code><code>//case "ComboBox":</code>

<code>                        </code><code>//    ((ComboBox)(parContainer.Controls[index])).Text = "";                           </code>

<code>                        </code><code>//    break;</code>

<code>                        </code><code>case</code> <code>"TextBox"</code><code>:</code>

<code>                            </code><code>((TextBox)(parContainer.Controls[index])).Text = </code><code>""</code><code>;</code>

<code>                        </code><code>case</code> <code>"UcTextBox"</code><code>:</code>

<code>                            </code><code>((UcTextBox)(parContainer.Controls[index])).Text = </code><code>""</code><code>;</code>

<code>                        </code><code>case</code> <code>"RichTextBox"</code><code>:</code>

<code>                            </code><code>((RichTextBox)(parContainer.Controls[index])).Text = </code><code>""</code><code>;</code>

<code>                        </code><code>case</code> <code>"MaskedTextBox"</code><code>:</code>

<code>                            </code><code>((MaskedTextBox)(parContainer.Controls[index])).Text = </code><code>""</code><code>;</code>

<code>                        </code><code>case</code> <code>"UcMaskTextBox"</code><code>:</code>

<code>                            </code><code>((UcMaskTextBox)(parContainer.Controls[index])).Text = </code><code>""</code><code>;</code>

<code>                        </code><code>case</code> <code>"RadioButton"</code><code>:</code>

<code>                            </code><code>((RadioButton)(parContainer.Controls[index])).Checked = </code><code>false</code><code>;</code>

<code>                        </code><code>case</code> <code>"CheckBox"</code><code>:</code>

<code>                            </code><code>((CheckBox)(parContainer.Controls[index])).Checked = </code><code>false</code><code>;</code>

<code>            </code><code>}</code>

<code>        </code><code>}</code>

  

WinForm容器内控件批量效驗是否允許為空?設定是否隻讀?設定是否可用等方法分享

  要清空控件的值、隻需調用:  

<code>EmptyControlValue(容器控件名稱);</code>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

<code>        </code><code>/// 判斷一容器控件内某控件的值是否可以為空(通過控件的AccessibleName屬性設定為"NotNull")</code>

<code>        </code><code>/// &lt;remarks&gt;</code>

<code>        </code><code>///     說明:</code>

<code>        </code><code>///         此方法顯示提示資訊,對于相應取值不能為空的控件,應設定其“Tag”屬性,以友好提示資訊。</code>

<code>        </code><code>/// &lt;/remarks&gt;</code>

<code>        </code><code>public</code> <code>static</code> <code>bool</code> <code>ControlValueIsEmpty(Control parContainer)</code>

<code>            </code><code>bool</code> <code>returnValue = </code><code>true</code><code>;</code>

<code>            </code><code>string</code> <code>hintInfo = </code><code>string</code><code>.Empty;</code>

<code>                    </code><code>ControlValueIsEmpty(parContainer.Controls[index]);</code>

<code>                    </code><code>if</code> <code>(</code><code>string</code><code>.IsNullOrEmpty(parContainer.Controls[index].AccessibleName))</code>

<code>                    </code><code>if</code> <code>(!parContainer.Controls[index].AccessibleName.ToLower().Contains(</code><code>"notnull"</code><code>)</code>

<code>                        </code><code>&amp;&amp; !parContainer.Controls[index].GetType().Name.ToLower().Contains(</code><code>"mask"</code><code>))</code>

<code>                        </code><code>case</code> <code>"Label"</code><code>:</code><code>//排除Label</code>

<code>                        </code><code>case</code> <code>"ComboBox"</code><code>:</code>

<code>                        </code><code>case</code> <code>"ComboBoxEx"</code><code>:</code>

<code>                        </code><code>case</code> <code>"UcComboBoxEx"</code><code>:</code>

<code>                            </code><code>if</code> <code>(parContainer.Controls[index] </code><code>is</code> <code>ComboBox)</code>

<code>                            </code><code>{</code>

<code>                                </code><code>if</code> <code>(((ComboBox)(parContainer.Controls[index])).Text.Trim() == </code><code>string</code><code>.Empty)</code>

<code>                                </code><code>{</code>

<code>                                    </code><code>hintInfo += GetControlName((ComboBox)parContainer.Controls[index]) + </code><code>"\n"</code><code>;</code>

<code>                                    </code><code>//ShowInfo((ComboBox)parContainer.Controls[index], " 不能為空!");</code>

<code>                                    </code><code>//((ComboBox)(parContainer.Controls[index])).Focus();</code>

<code>                                    </code><code>returnValue = </code><code>false</code><code>;</code>

<code>                                </code><code>}</code>

<code>                            </code><code>}</code>

<code>                            </code><code>else</code>

<code>                                </code><code>if</code> <code>(((UcComboBoxEx)(parContainer.Controls[index])).Text.Trim() == </code><code>string</code><code>.Empty)</code>

<code>                                    </code><code>hintInfo += GetControlName((UcComboBoxEx)parContainer.Controls[index]) + </code><code>"\n"</code><code>;</code>

<code>                                    </code><code>//ShowInfo((UcComboBoxEx)parContainer.Controls[index], " 不能為空!");</code>

<code>                                    </code><code>//((UcComboBoxEx)(parContainer.Controls[index])).Focus();</code>

<code>                            </code><code>if</code> <code>(parContainer.Controls[index] </code><code>is</code> <code>TextBox)</code>

<code>                                </code><code>if</code> <code>(((TextBox)(parContainer.Controls[index])).Text.Trim() == </code><code>string</code><code>.Empty)</code>

<code>                                    </code><code>hintInfo += GetControlName((TextBox)parContainer.Controls[index]) + </code><code>"\n"</code><code>;</code>

<code>                                    </code><code>//ShowInfo((TextBox)parContainer.Controls[index], " 不能為空!");</code>

<code>                                    </code><code>//((TextBox)(parContainer.Controls[index])).Focus();</code>

<code>                                </code><code>if</code> <code>(((UcTextBox)(parContainer.Controls[index])).Text.Trim() == </code><code>string</code><code>.Empty)</code>

<code>                                    </code><code>hintInfo += GetControlName((UcTextBox)parContainer.Controls[index]) + </code><code>"\n"</code><code>;</code>

<code>                                    </code><code>//ShowInfo((UcTextBox)parContainer.Controls[index], " 不能為空!");</code>

<code>                                    </code><code>//((UcTextBox)(parContainer.Controls[index])).Focus();</code>

<code>                            </code><code>if</code> <code>(((RichTextBox)(parContainer.Controls[index])).Text.Trim() == </code><code>string</code><code>.Empty)</code>

<code>                                </code><code>hintInfo += GetControlName((RichTextBox)parContainer.Controls[index]) + </code><code>"\n"</code><code>;</code>

<code>                                </code><code>//ShowInfo((RichTextBox)parContainer.Controls[index], " 不能為空!");</code>

<code>                                </code><code>//((RichTextBox)(parContainer.Controls[index])).Focus();</code>

<code>                                </code><code>returnValue = </code><code>false</code><code>;</code>

<code>                            </code><code>string</code> <code>mskTxtValue = </code><code>string</code><code>.Empty;</code>

<code>                            </code><code>object</code> <code>controlChinaeseName = </code><code>null</code><code>;</code>

<code>                            </code><code>if</code> <code>(parContainer.Controls[index] </code><code>is</code> <code>MaskedTextBox)</code>

<code>                                </code><code>mskTxtValue = ((MaskedTextBox)(parContainer.Controls[index])).Text;</code>

<code>                                </code><code>controlChinaeseName = ((MaskedTextBox)(parContainer.Controls[index])).Tag ?? ((MaskedTextBox)(parContainer.Controls[index])).Name;</code>

<code>                                </code><code>mskTxtValue = ((UcMaskTextBox)(parContainer.Controls[index])).Text;</code>

<code>                                </code><code>controlChinaeseName = ((UcMaskTextBox)(parContainer.Controls[index])).Tag ?? ((UcMaskTextBox)(parContainer.Controls[index])).Name;</code>

<code>                            </code><code>if</code> <code>(mskTxtValue.Substring(0, 4).Trim().Length &gt; 0) </code><code>//如果有有值,則要對輸入的日期進行格式判斷</code>

<code>                                </code><code>if</code> <code>(DateTimeHelper.IsDate(mskTxtValue))</code>

<code>                                    </code><code>//把使用者輸入的日期資料控制在(1754-01-01 至 9999-12-31這間),這主要解決SqlServer與C#日期範圍的沖突</code>

<code>                                    </code><code>if</code> <code>(DateTimeHelper.ToDate(mskTxtValue) &lt; DateTimeHelper.ToDate(</code><code>"1754-01-01"</code><code>) ||</code>

<code>                                        </code><code>DateTimeHelper.ToDate(mskTxtValue) &gt;= DateTimeHelper.ToDate(</code><code>"9999-12-31"</code><code>))</code>

<code>                                    </code><code>{</code>

<code>                                        </code><code>MessageBoxHelper.ShowErrorMsg(</code><code>"["</code> <code>+ controlChinaeseName + </code><code>"] 日期範圍不正确! /n正确日期範圍為:1754-01-01 至 9999-12-31"</code><code>);</code>

<code>                                        </code><code>returnValue = </code><code>false</code><code>;</code>

<code>                                    </code><code>}</code>

<code>                                </code><code>else</code>

<code>                                    </code><code>MessageBoxHelper.ShowErrorMsg(</code><code>"["</code> <code>+ controlChinaeseName + </code><code>"] 日期格式不正确! 正确格式如:2012-01-01"</code><code>);</code>

<code>                                </code><code>if</code> <code>(mskTxtValue.Substring(0, 5).Equals(</code><code>"    -"</code><code>) &amp;&amp; parContainer.Controls[index].AccessibleName.ToLower() == </code><code>"notnull"</code><code>)</code>

<code>                                    </code><code>MessageBoxHelper.ShowErrorMsg(</code><code>"["</code> <code>+ controlChinaeseName + </code><code>"]不能為空!"</code><code>);</code>

<code>                        </code><code>default</code><code>:</code>

<code>            </code><code>if</code> <code>(!</code><code>string</code><code>.IsNullOrEmpty(hintInfo.Trim()))</code>

<code>                </code><code>MessageBoxHelper.ShowWarningMsg(hintInfo + </code><code>"不能為空!"</code><code>);</code>

<code>            </code><code>return</code> <code>returnValue;</code>

<code>        </code><code>private</code> <code>static</code> <code>string</code> <code>GetControlName(Control ctr)</code>

<code>            </code><code>if</code> <code>(ctr.Tag == </code><code>null</code><code>)</code>

<code>                </code><code>return</code> <code>ctr.Name;</code>

<code>            </code><code>else</code>

<code>                </code><code>return</code> <code>ctr.Tag.ToString();</code>

<code>        </code><code>private</code> <code>static</code> <code>void</code> <code>ShowInfo(Control ctr, </code><code>string</code> <code>info)</code>

<code>                </code><code>MessageBoxHelper.ShowWarningMsg(ctr.Name + info);</code>

<code>                </code><code>MessageBoxHelper.ShowWarningMsg(ctr.Tag + info);</code>

  方法“ControlValueIsEmpty”可以用于批量判斷指定容器内的所有控件是否可以為空,對于不為空的可以做批量提示顯示,設定如下圖所示:

WinForm容器内控件批量效驗是否允許為空?設定是否隻讀?設定是否可用等方法分享

<code>        </code><code>/// 設定容器控件中包含的控件為隻讀(通過控件的AccessibleName屬性設定為"CanReadOnly")</code>

<code>        </code><code>/// &lt;param name="isReadOnly"&gt;是否為隻讀,true是隻讀,false則相反&lt;/param&gt;&gt;</code>

<code>        </code><code>public</code> <code>static</code> <code>void</code> <code>SetControlReadOnly(Control parContainer, </code><code>bool</code> <code>isReadOnly)</code>

<code>                </code><code>if</code> <code>(parContainer.Controls[index].HasChildren)</code>

<code>                    </code><code>SetControlReadOnly(parContainer.Controls[index], isReadOnly);</code>

<code>                    </code><code>if</code> <code>(parContainer.Controls[index].AccessibleName == </code><code>null</code> <code>&amp;&amp;</code>

<code>                      </code><code>!parContainer.Controls[index].AccessibleName.ToLower().Contains(</code><code>"canreadonly"</code><code>))</code>

<code>                                </code><code>((TextBox)(parContainer.Controls[index])).ReadOnly = isReadOnly;</code>

<code>                                </code><code>((UcTextBox)(parContainer.Controls[index])).ReadOnly = isReadOnly;</code>

<code>                            </code><code>((RichTextBox)(parContainer.Controls[index])).ReadOnly = isReadOnly;</code>

<code>                                </code><code>((MaskedTextBox)(parContainer.Controls[index])).ReadOnly = isReadOnly;</code>

<code>                                </code><code>((UcMaskTextBox)(parContainer.Controls[index])).ReadOnly = isReadOnly;</code>

<code>                            </code><code>((ComboBox)(parContainer.Controls[index])).Enabled = !isReadOnly;</code>

<code>                        </code><code>case</code> <code>"Button"</code><code>:</code>

<code>                        </code><code>case</code> <code>"UcButton"</code><code>:</code>

<code>                            </code><code>if</code> <code>(parContainer.Controls[index] </code><code>is</code> <code>Button)</code>

<code>                                </code><code>((Button)(parContainer.Controls[index])).Enabled = !isReadOnly;</code>

<code>                                </code><code>((UcButton)(parContainer.Controls[index])).Enabled = !isReadOnly;</code>

  方法“SetControlReadOnly”的使用方式與上面的方法相同,隻要設定控件的“AccessibleName”屬性為“CanReadOnly”即可。

<code>        </code><code>/// 設定容器控件中包含的控件是否可用(通過控件的AccessibleName屬性設定為"Enabled")</code>

<code>        </code><code>/// &lt;param name="isEnabled"&gt;是否為用可,true:可用,false:不可用&lt;/param&gt;&gt;</code>

<code>        </code><code>public</code> <code>static</code> <code>void</code> <code>SetControlEnabled(Control parContainer, </code><code>bool</code> <code>isEnabled)</code>

<code>                    </code><code>SetControlEnabled(parContainer.Controls[index], isEnabled);</code>

<code>                       </code><code>!parContainer.Controls[index].AccessibleName.ToLower().Contains(</code><code>"Enabled"</code><code>))</code>

<code>                    </code><code>//(parContainer.Controls[index]).BackColor = System.Drawing.Color.White;//設定目前控件的背景色為白色</code>

<code>                            </code><code>parContainer.Controls[index].Enabled = isEnabled;</code>

  方法“SetControlEnabled”用于設定容器控件内的指定控件的Enabled屬性。

本文轉自yonghu86 51CTO部落格,原文連結:http://blog.51cto.com/yonghu/1683244,如需轉載請自行聯系原作者

繼續閱讀