winform控制項通常有三種型別:復合控制項(composite controls),擴充套件控制項(extended controls),自定義控制項(custom controls)。
復合控制項:將現有的各種控制項組合起來,形成乙個新的控制項,將控制項的功能集中起來。
擴充套件控制項:在現有控制項的控制項的基礎上派生出乙個新的控制項,為原有控制項增加新的功能或者修改原有控制項的功能。
自定義控制項:直接從system.windows.forms.control類派生出來。control類提供控制項所需要的所有基本功能,包括鍵盤和滑鼠的事件處理。自定義控制項是最靈活最強大的方法,但是對開發者的要求也比較高,你必須為control類的onpaint事件寫**。
對於文字框的驗證是乙個經常需要用到的功能。你是如何驗證使用者輸入的呢?是在文字框的keydown事件中新增**撲捉按鍵,防止鍵入非法字元(比如只能輸入數字的文字框);還是在文字框失去焦點時,使用**驗證錯誤,然後彈出乙個錯誤訊息框;或者你使用正規表示式對文字框實施驗證。我在使用vb.net時,如果我想使使用者只能錄入數字,喜歡用keydown事件處理使用者按鍵來防止鍵入非數字。但我發現此方法有一定的缺陷,它不能防止你複製、貼上或者使用**改變文字框值的情形。
正規表示式是許多人的選擇,因為它不打擾使用者輸入,提高使用者體驗。但是如果在專案中的每個需驗證的地方你都要新增文字框和errorprovider元件,是否太麻煩了。我們完全可以製作乙個能驗證錯誤的文字框和errorprovider元件的復合控制項。
第一步:新建乙個.net 2.0 的windows窗體控制項庫專案,修改usercontrol1.cs的**,將類繼承的usercontrol改為textbox,修改類名為textboxvalidation。返回設計檢視,從工具箱中拖拽乙個errorprovider元件到設計器中。並修改名稱為txterrorprovider。
第二步:編碼如下:
using system;第三步:編譯using system.collections.generic;
using system.componentmodel;
using system.drawing;
using system.data;
using system.text;
using system.windows.forms;
using system.text.regularexpressions;
namespace textboxerrorprovider
private
string m_errormessage = "
文字框輸入錯誤
"; private
bool m_validationisempty = false;
private
string m_validationisemptystring = "
文字框不能是空的
"; private
string m_regexstring = "";
//////驗證用的表示式,預設是空的,即不驗證。
/// [category("
自定義屬性
"), description("
驗證用的字串表示式,預設是空的,即不驗證。
")] public
string regexstring
set
}///
///錯誤訊息
/// [category("
自定義屬性
"), description("
用於設定使用正規表示式驗證發生錯誤時顯示的訊息
")] public
string errormessage
set
}///
///是否驗證文字框是空值,預設是不驗證。
/// [category("
自定義屬性
"), description("
是否驗證文字框是空值,預設是不驗證。
")] public
bool validationisempty
set
}///
///當驗證文字框是空值時,顯示的錯誤資訊
/// [category("
自定義屬性
"), description("
驗證為空的文字框顯示的錯誤訊息
")] public
string validationisemptystring
set
}///
///驗證文字
/// ///
///public
virtual
void txtvalidation_validating(object sender, canceleventargs e)
else
}else
else
}else}}
//////返回當前文字框控制項的當前錯誤描述字串。
/// ///
public
string geterrormessage()
//2023年9月27日21:47修改:為方便使用者使用鍵盤輸入,增加以下**。
/// /// 當使用者按下enter鍵或者是向下的方向鍵時,將控制項的焦點移走。
/// 使用者按下向上方向鍵時,將控制項的焦點移到上乙個控制項。
///
///
///
private void textboxvalidation_keydown(object sender, keyeventargs e)
break;
}case keys.up: // 使用者按下向上方向鍵時,將控制項的焦點移到上乙個控制項。
break;}}}}}
第四步:測試
向解決方案中新增 windows窗體程式專案,在form1上拖拽四個textboxvalidation控制項,四個label控制項,形成如下圖所示:
為textboxvalidation1、textboxvalidation2新增textchanged事件處理程式:
//設定textboxvalidation1、textboxvalidation2的validationisempty屬性為true。密碼private
void textboxvalidation1_textchanged(object sender, eventargs e)
//確認密碼
private
void textboxvalidation2_textchanged(object sender, eventargs e)
textboxvalidation3的屬性設定如下圖:
textboxvalidation4的屬性設定如下圖:
執行結果圖:
winform 控制項透明
要實現c winform中的控制項與背景的透明,可以通過設定控制項的backcolor屬性為transparent,同時設定其父控制項。因為在c 中,控制項的透明指對父窗體透明。如果不設定parent屬性,那麼控制項將只對form透明,顯示的時候都會把form的背景色 預設為control 重刷一遍...
Winform控制項簡寫
控制項名稱 縮寫 button按鈕 btncheckbox核取方塊 chkcolumnheader檢視列表頭 colcombobox組合框 cbocontextmenu快捷選單 ctmdatagrid資料網格控制項 dgdatagridview資料網格檢視控制項 dgvdtetimepicker時間...
WinForm分頁控制項
分頁控制項是程式開發的資料載入顯示中較常用,為了能夠靈活重用,以下使用將該功能包裝成使用者控制項usercontrol,整體控制項效果圖如下 分頁paging完整 using system using system.collections.generic using system.component...