通过句柄怎么获得控件的对象类型呢?

skyworth9 2009-03-03 10:50:49
比如一个Button 我有了他的句柄,怎么能得到他的对象类型呢?
...全文
279 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyworth9 2009-03-03
  • 打赏
  • 举报
回复
获得了这个控件的类型了,可不可能动态改写他的窗口过程WndProc呢?
zgke 2009-03-03
  • 打赏
  • 举报
回复
如果这个句柄来自你自己的程序
Control c = Control.FromHandle(this.button1.Handle);
string typeName = c.GetType().Name;

这样完全可以啊
jinjazz 2009-03-03
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[System.Runtime.InteropServices.DllImport("User32.Dll")]
public static extern void GetClassName(int h, StringBuilder s, int nMaxCount);
private void Form1_Load(object sender, EventArgs e)
{
StringBuilder s=new StringBuilder(255);
GetClassName(this.Handle.ToInt32(), s, 255);
this.Text = s.ToString();

}
}
}
北京的雾霾天 2009-03-03
  • 打赏
  • 举报
回复
这个Control是什么类型?
------------------
Control是什么类型都不清楚,楼主却清楚什么叫“类型”?

你把代码放到一个WinForm程序里运行一下就知道了。
skyworth9 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hbxtlhx 的回复:]
比如:
C# codeControl c=Control.FromHandle(this.button1.Handle);stringtypeName=c.GetType().Name;
[/Quote]

这个靠谱。我试一下
skyworth9 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 icehawk 的回复:]
在c#内部的话, Control.FromHandle(hwnd);

[/Quote]

这个Control是什么类型? 我的意思是我不知道这个HWND的类型,我想获取他的对象类型。
北京的雾霾天 2009-03-03
  • 打赏
  • 举报
回复
比如:

Control c = Control.FromHandle(this.button1.Handle);
string typeName = c.GetType().Name;
skyworth9 2009-03-03
  • 打赏
  • 举报
回复
楼上的,button checkbox radiobutton 的窗口类都一样阿。。。
icehawk 2009-03-03
  • 打赏
  • 举报
回复
在c#内部的话, Control.FromHandle(hwnd);
zgke 2009-03-03
  • 打赏
  • 举报
回复
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetClassName(IntPtr hWnd, out STRINGBUFFER ClassName, int nMaxCount);


[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct STRINGBUFFER
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
public string szText;
}


STRINGBUFFER _Str =new STRINGBUFFER();
GetClassName(句柄,_Str,512);
liujiayu10 2009-03-03
  • 打赏
  • 举报
回复
foreach (Control c in tabPage2.Controls)
{
if (c.GetType().Name == "TextBox")
{
c.Text = string.Empty;
c.Tag = string.Empty;
}
}

111,126

社区成员

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

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

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