※ 引述《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)
1F:推 cross0619:感动 总算有人回答了 非常感谢这位大大的指导 07/02 18:16