问题:如何用C#遍历当前所有打开的窗体,从中找到某一个窗体句柄,通过句柄获取窗体对象,再遍历窗体对象中的控件,找到文本框并修改其中的值。
请高手赐教。

解决方案 »

  1.   

    Application.OpenForms.GetEnumerator();试试
      

  2.   

                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 , 楼主自行试试。
      

  3.   

    WindowsAPI 应该要用到的,不过具体怎么用就不清楚了
      

  4.   

        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;
            }