看板 C_Sharp 關於我們 聯絡資訊
※ 引述《cross0619 ()》之銘言: : 各位好 小弟我在網路上頭查到的方法有兩個 : 一. : public partial class Form1 : Form : { : public Form1() : { : InitializeComponent(); : } : [DllImport("Gdi32.dll")] : public static extern int GetPixel(System.IntPtr hdc,int nXPos, : int nYPos); : private void Form1_MouseDown(object sender, MouseEventArgs e) : { : Graphics g = CreateGraphics(); : System.IntPtr hDC = g.GetHdc(); : int c = GetPixel(hDC, e.X, e.Y); : } : } 依此範例來看,若Form1有子控制項的話,必需註冊子控制項的MouseDown事件。 : 而且方法中提到需using System.Runtime.InteropServices; : 二. : public partial class Form1 : Form : { : public Form1() : { : InitializeComponent(); : } : private void Form1_MouseDown(object sender, MouseEventArgs e) : { : int a = 0; : a = this.GetChildAtPoint(new Point(e.X,e.Y)).ForeColor.ToArgb(); : } : } 依範例來看的話,GetChildAtPoint如下 // // 摘要: // 擷取位於指定座標的子控制項。 // // 參數: // pt: // System.Drawing.Point,包含您要尋找控制項之處的座標。座標以和控制項工作區左上角相對的位置表示。 // // 傳回: // 表示位於指定點上的控制項的 System.Windows.Forms.Control。 當Form1的MouseDown事件被觸發時,因為依所傳入參數而得到傳回null,也就是找不到Control 而此時null被當成參考物件,且物件的方法被呼叫時,CLR就會擲回NullReferenceException。 : 這兩個方法小弟我是完全不了解...第一次使用這個東西 : 第一個方法雖然可行 但是卻只能夠抓沒有被元件覆蓋到的座標 : 就是說 有元件的地方點了沒有用 : 第二個方法則是完全沒用 只要執行就會跑出"並未將物件參考設定為物件的執行個體" : 究竟第二個方法是哪裡出問題呢 new一個Control來執行也不行(這方式感覺有點蠢...) 即使Control在Runtime是屬於Form1的子控制項,但還是要讓該控制項能觸發所需事件(ex. MouseDown) 這樣才能根據該控制項事件的觸發,執行事件內容(取得當時座標顏色) : 第一個方法雖然可以使用 但我真正需要的是"某個座標的顏色" : 請知道方法的大大們指導一下了 : 可以的話 也請順便解釋一下第一個方法到底是在寫什麼...完全看不懂 : 先謝過了 ※ 編輯: ckiori 來自: 220.130.184.10 (07/01 10:42)
cross0619:感動 總算有人回答了 非常感謝這位大大的指導 07/02 18:16