高手进入:如何解决动态查找窗体的问题!

weifj 2003-10-15 11:32:16
如何在应用程序域内动态找到某个类型的窗体实例(如Form1类的实例frm),而又不想使用初始变量记载frm。
例如:点击Button1时显示Form1实例frm,但再次点击Button1时判断是否有Form1的实例存在,如果存在则不显示窗体。只是修改已经打开的窗体的标题为【第i个窗体】。
注意:不想使用初始变量记载Form1实例frm,要动态判断是否有Form1的实例存在,而不知道frm,之后再捕获Form1的实例。
...全文
68 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
LA003 2003-10-17
  • 打赏
  • 举报
回复
学习
weifj 2003-10-17
  • 打赏
  • 举报
回复
谢了!我已经写出来了,使用的是Win32API函数。如下:private const int GW_Child = 5;
private const int GW_HWNDFIRST = 0;
private const int GW_HWNDLAST = 1;
private const int GW_HWNDNEXT = 2;
private const int GW_HWNDPREV = 3;
private System.Windows.Forms.Button button2;
private const int GW_OWNER = 4;


[DllImport("user32.dll")]
private extern static System.IntPtr GetWindow(System.IntPtr hWnd,int wCmd);

[DllImport("user32.dll")]
private extern static System.IntPtr GetDesktopWindow () ;

[DllImport("user32.dll")]
private extern static int GetWindowText(System.IntPtr hWnd,System.Text.StringBuilder lpString,int nMaxCount);

[DllImport("user32.dll")]
private extern static int GetWindowTextLength(System.IntPtr hWnd);

[DllImport("user32.dll")]
private extern static int GetClassName(System.IntPtr hWnd,System.Text.StringBuilder lpClassName,int nMaxCount);

private void button2_Click(object sender, System.EventArgs e)
{
System.Text.StringBuilder text = new System.Text.StringBuilder(256);
System.IntPtr LastHwnd = System.IntPtr.Zero ;
System.IntPtr CurHwnd = GetDesktopWindow() ;
CurHwnd = GetWindow(CurHwnd, GW_Child);
do
{
if (CurHwnd==System.IntPtr.Zero ) break;
GetWindowText(CurHwnd,text,128);
if(text.ToString().ToUpper()=="目标窗体的标题")
{
//Form2类:从System.Windows.Forms.Form派生的窗体类,其中定义了共有实例方法ShowText。
Form2 f = (Form2)System.Windows.Forms.Form.FromHandle(CurHwnd);
f.ShowText("Find Form2.");
break;
}
CurHwnd = GetWindow(CurHwnd, GW_HWNDNEXT);
} while(true);
}

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧