偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

C#窗體設(shè)計(jì)器開發(fā)實(shí)例詳解

開發(fā) 后端
C#窗體設(shè)計(jì)器的開發(fā)實(shí)例這里主要向你介紹實(shí)現(xiàn)控件移動(dòng)的功能,希望對(duì)通過(guò)介紹使你對(duì)了解和學(xué)習(xí)C#窗體設(shè)計(jì)器的開發(fā)有所幫助。

C#窗體設(shè)計(jì)器開發(fā)實(shí)例主要向你介紹控件移動(dòng),關(guān)鍵點(diǎn)就是需要設(shè)計(jì)一個(gè)獨(dú)立于任何控件的類(UIMoveKnob)來(lái)控制控件的移動(dòng)。我這里實(shí)現(xiàn)的方法只針對(duì)一個(gè)控件,如果需要同時(shí)選擇多個(gè)控件,然后同時(shí)移動(dòng)的話,你需要修改這個(gè)類,這里是有點(diǎn)難于控制,我使用的方法嚴(yán)重耦合,所以只在這里給出移動(dòng)一個(gè)控件的辦法,具體移動(dòng)過(guò)個(gè)控件的方法請(qǐng)各位討論。

C#窗體設(shè)計(jì)器開發(fā)目的:

要移動(dòng)某個(gè)選定的控件,實(shí)現(xiàn)控件的:MouseDown;MouseMove;MouseUp這3個(gè)事件。

在MouseDown的時(shí)候,記錄鼠標(biāo)點(diǎn)擊的開始位置,并設(shè)置開始移動(dòng)標(biāo)志為True;

在MouseMove的時(shí)候,把控件移動(dòng)相應(yīng)的距離(當(dāng)前鼠標(biāo)位置 – 鼠標(biāo)點(diǎn)擊的開始位置);

在MouseUp的時(shí)候,釋放移動(dòng)標(biāo)志為false。

有了控件移動(dòng)控制類(UIMoveKnob)以后,我們?cè)趺磳?shí)現(xiàn)UIMoveKnob和具體控件的關(guān)聯(lián)呢?同樣,我們需要在Form中增加一個(gè)變量private Hashtable _HashUIMoveKnob用于緩存每個(gè)控件對(duì)應(yīng)的UIMoveKnob對(duì)象。

同時(shí)在Form.ControlAdded事件中,通過(guò)this._HashUIMoveKnob.Add(e.Control, new UIMoveKnob(e.Control));設(shè)置其關(guān)聯(lián)性。

C#窗體設(shè)計(jì)器開發(fā)之UIMoveKnob的代碼如下:

  1. public class UIMoveKnob   
  2. {   
  3. private System.Windows.Forms.Control _Owner;   
  4. private int _MouseClickAtX;   
  5. private int _MouseClickAtY;   
  6. private bool _BeginDrag;  
  7.  
  8. public UIMoveKnob(System.Windows.Forms.Control Owner)   
  9. {   
  10. this._Owner = Owner;  
  11.  
  12. this._Owner.MouseDown +=   
  13. new System.Windows.Forms.  
  14. MouseEventHandler(this.Owner_MouseDown);   
  15. this._Owner.MouseMove +=   
  16. new System.Windows.Forms.  
  17. MouseEventHandler(this.Owner_MouseMove);   
  18. this._Owner.MouseUp +=   
  19. new System.Windows.Forms.  
  20. MouseEventHandler(this.Owner_MouseUp);   
  21. }  
  22.  
  23. void Owner_MouseDown(  
  24. object sender,   
  25. System.Windows.Forms.MouseEventArgs e)   
  26. {   
  27. this._Owner.Cursor =   
  28. System.Windows.Forms.Cursors.Default;  
  29.  
  30. this._MouseClickAtX = e.X;   
  31. this._MouseClickAtY = e.Y;   
  32. this._BeginDrag = true;   
  33. }  
  34.  
  35. void Owner_MouseMove(  
  36. object sender,   
  37. System.Windows.Forms.MouseEventArgs e)   
  38. {   
  39. try   
  40. {   
  41. if (this._BeginDrag)   
  42. {   
  43. Rectangle rect;  
  44.  
  45. /*   
  46.  * 對(duì)于下列控件,是不能拖動(dòng)的,所以這里也不繪制拖動(dòng)邊框   
  47.  * TabPage,   
  48.  */   
  49. if (this._Owner is System.Windows.Forms.TabPage)   
  50. {   
  51. //   
  52. }   
  53. else   
  54. {   
  55. this._Owner.Location =   
  56. new Point(this._Owner.Left +   
  57. e.X - this._MouseClickAtX,   
  58. this._Owner.Top + e.Y - this._MouseClickAtY);   
  59. }   
  60. }   
  61. }   
  62. catch { }   
  63. }  
  64.  
  65. void Owner_MouseUp(object sender,   
  66. System.Windows.Forms.MouseEventArgs e)   
  67. {   
  68. this._BeginDrag = false;   
  69. this._Owner.Parent.Refresh();   
  70. }   
  71. }  

修改后的Form代碼前半部分如下:

  1. private MouseHook _MouseHook;   
  2. //我們將所有的已經(jīng)與具體控件關(guān)聯(lián)了的UISizeKnob緩存在這個(gè)HashTable中   
  3. private Hashtable _HashUISizeKnob;   
  4. //負(fù)責(zé)控件移動(dòng)的類   
  5. private Hashtable _HashUIMoveKnob;  
  6.  
  7. public Form1()   
  8. {   
  9. InitializeComponent();  
  10.  
  11. this._MouseHook = new MouseHook(this);  
  12.  
  13. this._HashUISizeKnob = new Hashtable();   
  14. this._HashUIMoveKnob = new Hashtable();  
  15.  
  16. //為了簡(jiǎn)潔明了,我們?cè)贑ontrolAdded中來(lái)設(shè)置具體控件和UISizeKnob的關(guān)聯(lián)   
  17. this.ControlAdded += new ControlEventHandler(Form1_ControlAdded);   
  18. }  
  19.  
  20. void Form1_ControlAdded(object sender, ControlEventArgs e)   
  21. {   
  22. if (!(e.Control is UISizeDot))   
  23. {   
  24. this._HashUISizeKnob.Add(e.Control, new UISizeKnob(e.Control));   
  25. this._HashUIMoveKnob.Add(e.Control, new UIMoveKnob(e.Control));   
  26.    
  27. //點(diǎn)擊控件的時(shí)候,顯示控件的選擇   
  28. e.Control.Click += new EventHandler(Control_Click);   
  29. }   
  30. }  
  31.  
  32. void Control_Click(object sender, EventArgs e)   
  33. {   
  34. //壽險(xiǎn)清除已經(jīng)選擇的控件   
  35. foreach (UISizeKnob knob in this._HashUISizeKnob.Values)   
  36. {   
  37. knob.ShowUISizeDots(false);   
  38. }  
  39.  
  40. try    
  41. {   
  42. ((UISizeKnob)this._HashUISizeKnob[sender]).ShowUISizeDots(true);   
  43. }   
  44. catch { }   
  45. }  

相對(duì)來(lái)說(shuō)實(shí)現(xiàn)C#窗體設(shè)計(jì)器開發(fā)單個(gè)控件的拖動(dòng)比較簡(jiǎn)單,而實(shí)現(xiàn)多個(gè)控件的拖動(dòng),我們需要首先使用一個(gè)全局的變量來(lái)緩存我們所選擇的控件,然后在此類中。拖動(dòng)的時(shí)候,通過(guò)遍歷此全局變量,一個(gè)個(gè)改變所選擇控件的位置。

C#窗體設(shè)計(jì)器開發(fā)的一個(gè)實(shí)例的介紹就到這里,希望對(duì)你了解和學(xué)習(xí)C#窗體設(shè)計(jì)器開發(fā)有所幫助。

【編輯推薦】

  1. 詳解C#中不同類的類型
  2. 淺談C#中標(biāo)準(zhǔn)Dispose模式的實(shí)現(xiàn)
  3. C#選擇正確的集合進(jìn)行編碼
  4. C# 4.0新特性:協(xié)變與逆變中的編程思想
  5. C#應(yīng)用Attribute特性 代碼統(tǒng)計(jì)分析
責(zé)任編輯:仲衡 來(lái)源: CSDN博客
相關(guān)推薦

2009-08-26 11:07:36

C#打印窗體

2009-09-07 06:31:32

C#窗體移動(dòng)

2009-09-07 06:48:13

C#透明窗體

2009-09-07 06:07:46

C#窗體設(shè)計(jì)

2009-08-31 09:41:05

C#反射靜態(tài)方法開發(fā)

2009-09-07 05:10:52

C#模式窗體

2009-09-07 03:44:50

C#窗體間傳值

2009-09-03 19:00:15

C#判斷瀏覽器

2009-09-03 18:55:08

C#判斷瀏覽器

2009-08-18 10:14:19

C#插件構(gòu)架

2009-08-20 11:01:51

C#操作內(nèi)存

2009-09-11 12:31:52

C#實(shí)例詳解TypeConvert

2009-09-02 17:12:06

C#關(guān)機(jī)代碼

2009-09-07 05:40:16

C#窗體位置C#窗體大小

2009-09-22 17:53:32

C# COM組件開發(fā)

2009-08-28 13:12:56

C#反射實(shí)例C#反射

2009-09-02 19:12:37

C#遞歸

2009-09-07 05:50:59

C# Timer用法

2009-08-21 10:13:02

C#異步初步

2009-09-01 11:25:08

C#讀取Word文件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)