目錄
介紹
屬性
- 下載下傳KnobControlProject-1 MB
介紹
該代碼最初是由Jigar Desai很久以前寫的,作為概念的證明。(此控件的原始文章可以在C-SharpCorner.com上找到。)
我需要一個C#旋鈕控件,該旋鈕控件應具有我的個人項目的全部功能,并決定通過将其輸出類型設定為類庫并添加盡可能多的屬性以實作完整而靈活的控件來對其進行改進。
- 控件現在接受帶有文字和子刻度的刻度。
- 刻度的文本可以繪制在旋鈕的内部或外部。
- 刻度的“起始角度”和“終止角度”是可調的。
// "start angle" and "end angle" possible values:
// 90 = bottom (minimum value for "start angle")
// 180 = left
// 270 = top
// 360 = right
// 450 = bottom again (maximum value for "end angle")
// So the couple (90, 450) will give an entire circle
// and the couple (180, 360) will give half a circle.
- MouseWheel事件現在是被管理的。
提示:您可能已經注意到 UserControl不會在Properties視窗中顯示MouseWheel事件。那裡有麻煩的提示。WM_MOUSEWHEEL消息冒泡。如果具有焦點的控件無法處理,則Windows會将其傳遞給其父對象。重複一次,直到找到要處理的父視窗為止。
HandledMouseEventArgs 讓您停止冒泡。
protected override void OnMouseWheel(MouseEventArgs e)
{
base.OnMouseWheel(e);
if ( isFocused && isKnobRotating &&
Utility.isPointinRectangle(new Point(e.X, e.Y), rKnob))
{
// the Delta value is always 120, as explained in MSDN
int v = (e.Delta / 120) * (_maximum - _minimum) / _mouseWheelBarPartitions;
SetProperValue(Value + v);
// Avoid to send MouseWheel event to the parent container
((HandledMouseEventArgs)e).Handled = true;
}
}
屬性
參數 | 意義 |
價值觀 | |
Value | 擷取或設定旋鈕的值 |
_minimum (int, 0) | 擷取或設定值範圍的下限 |
_maximum (int, 100) | 擷取或設定值範圍的上限 |
_LargeChange (int) | 擷取或設定用滑鼠進行更改時要添加到Value屬性或從Value屬性減去的值。 |
_SmallChange (int) | 擷取或設定使用鍵盤進行更改時要添加到Value屬性或從Value屬性減去的值。 |
_mouseWheelBarPartitions | 設定使用滑鼠滾輪時條形圖分割的部分數 |
顯示 | |
_showLargeScale (bool) | 顯示或隐藏主要刻度線 |
_showSmallScale (bool) | 顯示或隐藏中間的刻度線 |
KnobPointerStyles (enum) | 設定旋鈕指針的樣式:圓或直線 |
_startAngle | 設定開始角度以顯示刻度(預設為135,最小值90) |
_endAngle | 設定結束角度以顯示刻度(預設405,最大450) |
Ticks | |
_scaleDivisions (int) | 設定最小和最大之間的間隔數 |
_scaleSubDivisions (int) | 設定主刻度線之間的細分數 |
_drawDivInside (bool) | 在旋鈕圓的内部或外部繪制刻度線 |
顔色 | |
_scaleColor (Color) | 刻度線的顔色 |
_knobBackColor (Color) | 旋鈕的背景色(預設LightGray) |
_PointerColor (Color) | 指針的背景色(預設SlateBlue) |
字型 | |
_scaleFont (Font) | 設定Font(請參閱_scaleFontAutoSize以擷取大小) |
_scaleFontAutoSize (bool) | 如果為true,則自動計算字型大小,否則為所選大小 |
此控件管理的單個事件是ValueChanged事件。
private void knobControl1_ValueChanged(object Sender)
{
label1.Text = knobControl1.Value.ToString();
}
該項目是使用Visual Studio 2017版開發的。
代碼并不難了解,也不難修改以滿足您的需要。主要的困難是你需要一些數學技巧來了解所有的東西是如何顯示的(實際上并不是那麼多:需要sinus和餘弦水準:-)。
您可以下載下傳示範項目以檢視KnobControl的實際運作情況或僅檢視KnobControl的源代碼。