winform 中在容器控件里面添加其他控件,获取窗体所以控件的时候会获取不到容器里面的控件,在线等

winform 中在容器控件里面添加其他控件,获取窗体所以控件的时候会获取不到容器里面的控件,在线等,第1张

用foreach查找你得指定要查找的范围,或者是使用嵌套的foreach来查找,不是很方便,你可以使用Find,这个比较适合这种多级控件的查找:

Control[] controls=thisControlsFind("控件名称",true);

此方法的的第一个参数为你要查找的控件名称,第二个参数指定是否包括子控件,应该能够解决你的这个问题,希望对你有帮助,还有疑问请追问或是Hi

一个递归方法取得页面上所有类型为textbox的控件,并对其清空,相信你看了后有所感悟。

private void Button1_Click(object sender, SystemEventArgs e)

{

foreach (Control ctl in thisControls)

{

thistxtClear(ctl);

}

}

private void txtClear(Control ctls)

{

if(ctlsHasControls())

{

foreach (Control ctl in ctlsControls)

{

txtClear(ctl);

}

}

else

{

if (ctlsGetType()Name == "TextBox")

{

TextBox tb = new TextBox();

tb = (TextBox)thisFindControl(ctlsID);

tbText = "";

}

}

}

不知道你解决了没,最近正好研究python。

hwnd=win32guiFindWindow()这个获取窗体句柄,大概都会用;

ctrl=win32guiFindWindowEx(hwnd,None,'窗口类名',‘标题文本’)已知控件类名或控件名时获取控件句柄,这个标题文本不一定存在,所以使用None默认值获取的是该窗口类名中第一个顺位的控件句柄。

你使用b=win32guiGetDlgItem(edit,资源ID)最终结果是获取的是句柄,这里的资源ID其实是spy++中的窗口ID,句柄是可变的,窗口ID是不可变的。这里似乎错了,你这样子大概获取的是控件中的子项(控件有子项的话,比如Combox中的edit框),我猜的,没试过。b=win32guiGetDlgItem(hwnd,窗口ID)是已知ID下获取某控件句柄

如果你想获取某个控件的ID则ctrlid=win32guiGetDlgCtrlID(ctrl)这是一只某控件句柄的情况下获取该控件在应用程序中的窗口ID。

如果不知控件句柄的情况下大概可以试试spy++获取窗口ID,把窗口ID(这个是16进制的)转化成10进制带进b=win32guiGetDlgItem(hwnd,窗口ID)大概也可以得到控件句柄。

其实就是三个函数之间的转化

ctrl=win32guiFindWindowEx(hwnd,None,'edit',None)控件句柄

ctrlid=win32guiGetDlgCtrlID(ctrl)控件的窗口id

ctrl2=win32guiGetDlgItem(hwnd,ctrlid)控件句柄

print "%x" %ctrllist

print "%x" %ctrlid

print "%x" %ctrl

输出,看一下数据与spy++是否一致。然后ctrl=ctrl2

public static string textbox = stringEmpty;//这么定义其他类就可以用Form1text直接访问了

private void button1_Click(object sender, EventArgs e)

{

textbox = thistextBox1Text;

//MessageBoxShow( thistextBox1Text);

}

第一个:

procedure TForm1bt51Click(Sender: TObject);

var

I: Integer;

str: String;

begin

str := 'bt'+Edit1Text;

for I := 0 to ControlCount-1 do

if Controls[I] is Tbutton Then

if (Controls[I] as TButton)Name=str then

(Controls[I] as Tbutton)Caption := Edit1Text;//button不能直接改颜色,这里用改标题代替

end;

第二个:

一次选中bt1bt50,然后双击OnClick

写代码

Edit1Text := copy((Sender as TButton)Name,3,2);

vbnet教程之vbnet的Button控件

vbnet的Button控件

Button(按钮)控件一般接受鼠标单击事件被用来启动、中断或结束一个进程(相当于Visual Basic以前版本的CommandButton控件)。单击Button控件时将调用已写入Click事件过程中的过程。Button控件在大多数Visual Basic应用程序中都会用到,用户可以单击按钮执行 *** 作。单击时,按钮不仅能执行相应的 *** 作,而且看起来与被按下和松开一样。Button控件在工具箱中的图标如图所示:

1向窗体添加按钮

在应用程序中很可能要使用多个按钮。就象在其他容器控件上绘制按钮那样,从工具箱里把Button控件直接拖到窗体上即可。可用鼠标调整按钮的大小,也可通过设置Location(坐标,用来确定控件相对窗体左上方顶点的位置)和Size(大小,第一个参数代表宽度,第二个参数代表高度)属性进行调整。

2设置按钮显示文本

可用Text属性改变按钮上显示的文本。设计时,可在控件的“属性窗口”中设置此属性。在设计时设置Text属性后将动态更新按钮文本。Text属性最多包含255个字符。若标题超过了命令按钮的宽度,则会折到下一行。但是,如果控件无法容纳其全部长度,则标题会被剪切。可以通过设置Font属性改变在命令按钮上显示的字体。

3创建键盘快捷方式

可通过Text属性创建按钮的访问键快捷方式。为此,只需在作为访问键的字母前添加一个连字符(&)。例如,要为标题“Ok”创建访问键,应在字母“O”前添中连字符,于是得到“&Ok”。运行时,字母“O”将带下划线,同时按Alt+O键就可执行单击按钮程序所执行的动作。

注意:如果不创建访问键,而又要使标题中包含连字符,应添加两个连字符(&&)。这样,在标题中就只显示一个连字符。

4选定按钮

运行时,可用鼠标或键盘通过下述方法选定按钮:

(1)用鼠标单击按钮;

(2)按Tab键,将焦点转移到按钮上,然后按Enter键选定按钮;

(3)按按钮的访问键([Alt+带有下划线的字母])。

5Click事件

运行时单击按钮,将触发按钮的Click事件并执行写入Click事件过程中的代码,同时,单击按钮的过程也将生成MouseMove、MouseLeave、MouseDown和MouseUp等事件。如果要在这些相关事件中附加事件过程,则应确保 *** 作不发生冲突。对控件的 *** 作不同,这些事件过程发生的顺序也不同。Button控件的单击事件发生顺序为:

MouseMove→MouseDown→Click→MouseUp→MouseLeave

注意:如果用户试图双击按钮控件,则其中每一次单击都将分别处理;也即按钮控件不支持双击事件。

6增强按钮的视觉效果

按钮控件象复选框和选项按钮一样,可通过Image属性设置Button控件上的图标以增强视觉效果,然后设置图标()的属性:ImageAlign显示图标()的位置。通过设置ImageIndex(在框中的索引)以及ImageList(框)则可实现如下的效果,比如要向按钮添加图标或位图,或者在单击、禁止控件时显示不同的图象等等。

以上就是关于winform 中在容器控件里面添加其他控件,获取窗体所以控件的时候会获取不到容器里面的控件,在线等全部的内容,包括:winform 中在容器控件里面添加其他控件,获取窗体所以控件的时候会获取不到容器里面的控件,在线等、c# 遍历所有窗体的控件,并获取他的text、python pywin32 里面 *** 作窗体,获取窗体里面的数据,在函数GetDlgItem函数中,怎么获取第二个参数的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9684559.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存