foreach (Form form in Application.OpenForms) { foreach (System.Windows.Forms.Control tb in form.Controls) { if (tb is TextBox && tb.Name.Equals("控件名称")) { tb.Text = "值"; } } }好像相关的窗体及控件均要设置为 public , 楼主自行试试。
WindowsAPI 应该要用到的,不过具体怎么用就不清楚了
public delegate bool EnumWindowsProc(IntPtr p_Handle, int p_Param); [DllImport("user32.dll")] public static extern int EnumWindows(EnumWindowsProc ewp, int lParam); [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern int GetWindowText(IntPtr hWnd, out STRINGBUFFER text, int nMaxCount); [DllImport("user32.dll")] public static extern bool IsWindowVisible(IntPtr hWnd); [DllImport("user32.dll")] public static extern IntPtr GetWindowThreadProcessId(IntPtr hwnd, ref int lpdwProcessId); [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct STRINGBUFFER { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)] public string szText; } private void button1_Click(object sender, EventArgs e) { MessageWindwos(); } public void MessageWindwos() { EnumWindowsProc _EunmWindows = new EnumWindowsProc(NetEnumWindows); EnumWindows(_EunmWindows, 0); }
private bool NetEnumWindows(IntPtr p_Handle, int p_Param) { if (!IsWindowVisible(p_Handle))return true; STRINGBUFFER _TitleString = new STRINGBUFFER(); GetWindowText(p_Handle, out _TitleString, 256); MessageBox.Show(_TitleString.szText); ///获取的窗体
return true; } 获取说有窗体 ...获取控件和这个差不过 使用 public delegate bool EnumWindowsProc(IntPtr p_Handle, int p_Param); [DllImport("user32.dll")] public static extern int EnumChildWindows(IntPtr hWndParent, EnumWindowsProc ewp, int lParam); /// <summary> /// 获取所有控件的信息 /// </summary> /// <param name="p_Handle">窗体句饼</param> /// <returns></returns> public LoadControl(IntPtr p_Handle) { EnumWindowsProc _EunmControl = new EnumWindowsProc(NetEnumControl); Win32API.EnumChildWindows(p_Handle, _EunmControl, 0); return _ControlList; } private bool NetEnumControl(IntPtr p_Handle, int p_Param) { STRINGBUFFER _TextString = new STRINGBUFFER(); GetWindowText(p_Handle, out _TextString, 256); MessageBox.Show(_TextString.szText); return true; }
{
foreach (System.Windows.Forms.Control tb in form.Controls)
{
if (tb is TextBox && tb.Name.Equals("控件名称"))
{
tb.Text = "值";
}
}
}好像相关的窗体及控件均要设置为 public , 楼主自行试试。
[DllImport("user32.dll")]
public static extern int EnumWindows(EnumWindowsProc ewp, int lParam);
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowText(IntPtr hWnd, out STRINGBUFFER text, int nMaxCount);
[DllImport("user32.dll")]
public static extern bool IsWindowVisible(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern IntPtr GetWindowThreadProcessId(IntPtr hwnd, ref int lpdwProcessId);
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct STRINGBUFFER
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
public string szText;
} private void button1_Click(object sender, EventArgs e)
{
MessageWindwos();
} public void MessageWindwos()
{ EnumWindowsProc _EunmWindows = new EnumWindowsProc(NetEnumWindows);
EnumWindows(_EunmWindows, 0);
}
private bool NetEnumWindows(IntPtr p_Handle, int p_Param)
{
if (!IsWindowVisible(p_Handle))return true; STRINGBUFFER _TitleString = new STRINGBUFFER();
GetWindowText(p_Handle, out _TitleString, 256); MessageBox.Show(_TitleString.szText); ///获取的窗体
return true;
}
获取说有窗体 ...获取控件和这个差不过 使用 public delegate bool EnumWindowsProc(IntPtr p_Handle, int p_Param);
[DllImport("user32.dll")]
public static extern int EnumChildWindows(IntPtr hWndParent, EnumWindowsProc ewp, int lParam);
/// <summary>
/// 获取所有控件的信息
/// </summary>
/// <param name="p_Handle">窗体句饼</param>
/// <returns></returns>
public LoadControl(IntPtr p_Handle)
{
EnumWindowsProc _EunmControl = new EnumWindowsProc(NetEnumControl); Win32API.EnumChildWindows(p_Handle, _EunmControl, 0);
return _ControlList;
}
private bool NetEnumControl(IntPtr p_Handle, int p_Param)
{
STRINGBUFFER _TextString = new STRINGBUFFER();
GetWindowText(p_Handle, out _TextString, 256);
MessageBox.Show(_TextString.szText); return true;
}