C# 获取窗体的句柄

在winform中,有main,form1,form2,form3......窗体,在form1,form2,form3......窗体上按按钮会触发main窗体中的事件,然后在main中如何判断是哪个窗体触发的这个事件。

你可以main中增加一个public变量,每个触发Main窗体事件的按钮代码中,都送入自己的窗口标志(或窗口句柄)追问

你的意思是每个按钮下去都加个发送代码? 这按钮太多。。。太那个了...

追答

主窗体中:
public static IntPtr CallFrom= IntPtr.Zero;
其他窗体的按钮事件中增加:
main.CallFrom= this.Handle;//其中main是主窗体类名,不需要是实例名
这样就传入了调用窗口的句柄。
如果你不使用句柄判断,可以用string变量传入窗口名字也行
主窗体中:
public static string CallFrom;
其他窗体的按钮事件中增加:

main.CallFrom= "form1";

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-12-16
比如 一个事 show(object sender, EventArgs e)
{
//如果发送者是Form
Form form=(Form)sender;
string name =form.Text; //这里就得到触发都的名称了
}追问

点击一个窗体内的按钮弄成一个事件要怎么弄,能告知下吗? 万分感谢!

追答

简单地写委托给你参考下:
在子窗体类外声明:
public delegate void SendEventHandler(object sender,string msg)// msg是你要传递的值。这
//这里用string 类型举例
在子窗体的类里面
public SendEventHandler send;
在子窗体的按钮事件里
private void button1_Click(object sender, EventArgs e)
{
send(this,"这是一个窗体传值问题");
}
在main窗体里声明
private void getMsg(object sender,string msg)
{
Form form=(Form)sender;
string name =form.Text; //窗体的名称
string msg =msg; //子窗体传递的字符串
}

创建子窗体时如
form1 f1=new form1();

f1.send=new SendEventHandler(getMsg) ;
f1.show();

程序完成后。当你点击button1。main窗体的getMsg方法就会得到发送者和传递的字符串

追问

点击按钮传值我会啊,我要效果是所有的按钮点击都会传值(传的值医用),然后可以把所有的按钮点击弄成一个事件吗?

追答

private void button1_Click(object sender, EventArgs e)
{
send(this,"这是一个窗体传值问题");
}

private void button2_Click(object sender, EventArgs e)
{
send(this,"这是一个窗体传值问题 我 是按钮2");
}
private void button3_Click(object sender, EventArgs e)
{
send(this,"这是一个窗体传值问题 我 是按钮3");
}
你说哪个不能用呢?

本回答被网友采纳
第2个回答  2014-09-12
Handle属性可以获取窗口得句柄
Form1 form=new Form1();
form.Handle追问

我不知道是哪个窗体,from怎么获得。。。

第3个回答  2014-09-12
根据不同ID的Button点击事件就可以判断呀!追问

根据button的id来判断button所在哪个窗体吗?

追答

详细代码 :
住窗体Form_Main:
public partial class Form_Main : Form
{
public Form_Main()
{
InitializeComponent();
}
private void btn_to_f1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
f1.Show();
this.Hide();
}
private void btn_to_f2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
this.Hide();
}
private void btn_close_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
副窗体Form1:(Form2,Form3,Form4 ....与Form1同样的处理方式)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btn_f1_Click(object sender, EventArgs e)
{
Form_Main fm = new Form_Main();
fm.Show();
fm.tb_msg.Text = this.Text;
this.Close();
}
}

C#获取当前窗体句柄及该窗体里的信息
C#获取当前窗体句柄及该窗体里的信息可以参考以下的代码:FindWindow(lpClassName, {窗口的类名} lpWindowName: PChar {窗口的标题} ): HWND; {返回窗口的句柄; 失败返回 0} \/\/FindWindowEx 比 FindWindow 多出两个句柄参数:FindWindowEx(Parent: HWND; {要查找子窗口的父窗口句柄} Child: HWND; ...

怎么用C#获取指定窗口的句柄
获取鼠标位置处窗口句柄,需要使用到Win32Api函数WindowFromPoint,用来根据坐标获取窗口句柄,C#引用如下:[DllImport("user32.dll", EntryPoint = "WindowFromPoint")]\/\/指定坐标处窗体句柄 public static extern int WindowFromPoint(int xPoint,int yPoint );只要能够获取鼠标的位置,然后调用该函数就可以得...

c#怎么找到一个窗体中的textbox句柄,窗体句柄已经获得
不不不,这个窗体是个试验品,意思就是他是一个别人写得程序,我要自己写程序对他进行操作!我只要能获得他俩的句柄就可以了

C# 获取窗体的句柄
你可以main中增加一个public变量,每个触发Main窗体事件的按钮代码中,都送入自己的窗口标志(或窗口句柄)

求C#代码 得到当前窗口句柄并且向 句柄窗口模拟键盘按键 请加上注释...
this.Handle就是获取当前窗体的句柄。。。向这个 句柄发送消息 要用API \/\/API申明 [DllImport("user32.dll")]public static extern long SendMessage(IntPtr hwnd, uint Msg, long wParam, long lParam);\/\/这个是向指定的窗体发送一个关闭的消息:IntPtr A_hwnd = FindWindow(null, this.txt);...

C# 子窗体如何获取父窗体的句柄???
创立子窗体时将父窗体的对象传过去,这样就能取得父窗体的句柄了。

C#有没有可能获得某个窗体进程的句柄,然后在它上面作画?
进程的句柄不行,但是可以通过进程得到主窗体的句柄,然后在上面作画.或者直接得到某个窗体的句柄 1. IntPtr hwnd = Process.GetCurrentProcess().MainWindowHandle;2. IntPtr hwnd = FindWindow("","窗体名称");通过1或者2得到hwnd后:HDC hdc = GetDC(hwnd);)\/\/取得客户区dc HDC hdc1 = ...

如何用C#获取外部程序(VC写的)窗口中某个按钮的句柄并执行点击操作...
\/\/获得待测程序主窗体句柄 private static IntPtr FindMainWindowHandle(string caption,int delay,int maxTries){ IntPtr mwh = IntPtr.Zero;bool formFound = false;int attempts = 0;while (!formFound && attempts < maxTries){ if (mwh == IntPtr.Zero){ Console.WriteLine("Form not yet ...

c# 如何获取另外一个窗口句柄
string lpClassName,string lpWindowName );[DllImport("user32.dll", EntryPoint = "GetWindow")]\/\/获取窗体句柄,hwnd为源窗口句柄 \/*wCmd指定结果窗口与源窗口的关系,它们建立在下述常数基础上:GW_CHILD 寻找源窗口的第一个子窗口 GW_HWNDFIRST 为一个源子窗口寻找第一个兄弟(同级)窗口,或...

C# 根据进程ID获取进程主窗口句柄
\/\/\/ 获得拥有输入焦点的窗口的句柄 \/\/\/ \/\/\/ <returns>拥有焦点的那个窗口的句柄。如没有窗口拥有输入焦点,则返回零<\/returns> [DllImport("user32.DLL", EntryPoint="GetFocus",SetLastError=true,CharSet=CharSet.Unicode, ExactSpelling=true,CallingConvention=CallingConvention.StdCall)]public static...

相似回答