估计地球人都看不懂你说的整合到一起是什么意思吧,click求出了四个点的值,全局变量在paint事件里面取就可以了。在click代码最后加上pictureBox1Invalidate();就可以进入到pictureBox1_Paint事件了
在你的窗体代码中添加如下API定义代码(引人SystemRuntimeInteropServices命名空间(using SystemRuntimeInteropServices;)):
[Flags]
enum MouseEventFlag : uint
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
XDown = 0x0080,
XUp = 0x0100,
Wheel = 0x0800,
VirtualDesk = 0x4000,
Absolute = 0x8000
}
[DllImport("user32dll")]
static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
在你的按钮单击事件中(Button_Click)加入如下代码:
CursorPosition = new Point(0 /x坐标/, 0 /y坐标/); //这里是移动鼠标的代码
mouse_event(MouseEventFlagLeftDown,0,0,0,UIntPtrZero);
mouse_event(MouseEventFlagLeftUp,0,0,0,UIntPtrZero);
//这里是鼠标点击的代码(左键)
要知道鼠标的坐标是X,Y两个值你存的话也要存两个 存一个无意义代码:using System;
using SystemCollectionsGeneric;
using SystemComponentModel;
using SystemData;
using SystemDrawing;
using SystemLinq;
using SystemText;
using SystemWindowsForms;namespace WinForm_test_02
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int x1, y1, x2, y2, x3, y3, x4, y4,count = 0;
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
switch (count)
{
case 0://count = 0;第一次点击时赋值
x1 = eX;
y1 = eY;
break;
case 1://count = 0;第二次点击时赋值
x2 = eX;
y2 = eY;
break;
case 2://count = 0;第三次点击时赋值
x3 = eX;
y3 = eY;
break;
case 3://count = 0;第四次点击时赋值
x4 = eX;
y4 = eY;
break;
default://超出四次 不做记录
return;
}
count++;//记录点击次数
}
}
}
你可以加一句MessageBoxShow() 来判断下是否正确本人测试无问题
按Ctrl + R统治者将出现在地图上。用鼠标右键单击标尺上,选择[像素]。
所以,你的规模将鼠标移动到任何位置,在地图上就会显示相应的。
(在视图菜单栏中的“标尺”选项,快捷键为Ctrl + R。)
我这是Winform版本的,就是在Form窗体中加:ToolTip控件, 然后在Form中的MouseMove事件中加:
toolTip1Show("" + eX + ";" + eY, this, new Point(eX, eY));
就完了。。。
页面代码:
namespace WindowsFormsApplication1
{
partial class Form1
{
/// <summary>
/// Required designer variable
/// </summary>
private SystemComponentModelIContainer components = null;
/// <summary>
/// Clean up any resources being used
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
componentsDispose();
}
baseDispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor
/// </summary>
private void InitializeComponent()
{
thiscomponents = new SystemComponentModelContainer();
thislabel1 = new SystemWindowsFormsLabel();
thistoolTip1 = new SystemWindowsFormsToolTip(thiscomponents);
thisSuspendLayout();
//
// label1
//
thislabel1AutoSize = true;
thislabel1Location = new SystemDrawingPoint(227, 106);
thislabel1Name = "label1";
thislabel1Size = new SystemDrawingSize(41, 12);
thislabel1TabIndex = 0;
thislabel1Text = "label1";
//
// Form1
//
thisAutoScaleDimensions = new SystemDrawingSizeF(6F, 12F);
thisAutoScaleMode = SystemWindowsFormsAutoScaleModeFont;
thisClientSize = new SystemDrawingSize(641, 382);
thisControlsAdd(thislabel1);
thisName = "Form1";
thisText = "Form1";
thisMouseMove += new SystemWindowsFormsMouseEventHandler(thisForm1_MouseMove);
thisResumeLayout(false);
thisPerformLayout();
}
#endregion
private SystemWindowsFormsLabel label1;
private SystemWindowsFormsToolTip toolTip1;
}
}
主要代码:
using System;
using SystemCollectionsGeneric;
using SystemComponentModel;
using SystemData;
using SystemDrawing;
using SystemLinq;
using SystemText;
using SystemWindowsForms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
toolTip1Show("" + eX + ";" + eY, this, new Point(eX, eY));
}
}
}
panel3Location
=
new
Point(X,Y);或者右边属性栏里面有location自己设置
追问:
我想根据鼠标的位置设置panel的坐标。
但是位置始终不准确。
但是坐标始终不准确。
红圈为鼠标位置。
红色块为panel的位置。
回答:
给你的控件添加一个MouseClick事件
然后在事件里面用eX
eY去获取当前鼠标点下的坐标
然后将坐标值替换里面的panel3Location
=
new
Point(X,Y);
X,Y就可以了~~
还可以根据不同需要来换鼠标事件
追问:
还是不行啊。
回答:
鼠标悬停改用MouseHover事件
如果取出来坐标赋值上去还出现你说的坐标显示不对
可能对应的坐标算法不一样
有时候是父容器里的坐标
有时候是对应窗体来算得
追问:
使用MouseHover事件,不知道怎么获取鼠标坐标。
且坐标还是不准确。
回答:
说那么明白了
eX
eY
就是对应当前鼠标的的坐标
直接用这句就可以
panel1Location
=
new
Point(eX,
eY);
追问:
我知道eX
eY
如图,form的窗口大小为300300,以像素为单位计算
form坐上角坐标:0,0,右下角为300,300
button1坐标:-30,32 (x为负值,所以跑到左边去了)
button2坐标:86,-8 (y为负值,所以跑到上面去了)
button3坐标:86,84
以上就是关于c# winform 点击按钮后计算坐标 然后画图全部的内容,包括:c# winform 点击按钮后计算坐标 然后画图、c# winform 控制鼠标,让鼠标在窗体的指定坐标上单击、c#记录鼠标坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)