c#中获取控件窗体句柄,获取窗体等的一些操作

el/2024/7/13 12:04:47
1.Control.Handle 就是获取控件绑定到的窗口句柄。   

2.control.IsHandleCreated  控件是否有与其关联的句柄

3.WinForm自定义函数FindControl实现按名称查找控件

public static Control FindControl(Control parentControl, string findCtrlName)

{

  Control _findedControl = null;

  if (!string.IsNullOrEmpty(findCtrlName) && parentControl != null)

  {

 foreach (Control ctrl in parentControl.Controls)

 {

   if (ctrl.Name.Equals(findCtrlName))

   {

 _findedControl = ctrl;

 break;

   }

 }

  }

  return _findedControl;

}

 

4.判断窗体是否已打开

方式1:

 foreach (Form frm in Application.OpenForms)
 {
    if (frm is youForm)
    {
       youForm.Activate();
       youForm.WindowState = FormWindowState.Normal;
       return;
     }
 }
 Form youForm = new Form();
 youForm.Show();

方式2:

Form1 F1 ;
 
if(F1 == null || F1.IsDisposed)
{
   F1 = new Form1();
   F1.Show();//未打开,直接打开。
}
else
{
   F1.Activate();//已打开,获得焦点,置顶。
}
 

5.通过名字寻找窗体

public Form FindForm(string name)

{

    foreach (Form f in Application.OpenForms)

    {

        if (f.Name == name) return f;

    }

    return null;

}

 6.以下是代码中创建progressbar的实例

 int count = 0;
        private void button4_Click(object sender, EventArgs e)
        {
            Thread th = new Thread(() => {
                Form form = new Form();
                form.Name="myForm";
                form.Width = 200;
                form.Height = 20;
                form.ControlBox = false;
                //form.ShowInTaskbar = false;
                form.StartPosition = FormStartPosition.CenterScreen;
                ProgressBar pb = new ProgressBar();
                pb.Dock = DockStyle.Fill;
                pb.Maximum = 100;
                pb.Minimum = 0;
                pb.Value = count;
                pb.BringToFront();
                pb.Visible = true;
                pb.Parent = form;
                form.ShowDialog();
            
            });
            th.Start();

            for (int i = 0; i < 1000;i++ )
            {
                Thread.Sleep(5);
                count = Convert.ToInt32(i * 1.0 / 1000 * (100 - 0) + 0);
              Control control=  FindForm("myForm");
              if (control!=null&&control.Name == "myForm" && control.IsHandleCreated)
                {
                    control.Invoke(new Action(() => {
                        ProgressBar pb = control.Controls[0] as ProgressBar;
                        pb.Value = count;
                    }));
                   
                }
            }
            th.Abort();
        }
        public Form FindForm(string name)
        {

            foreach (Form f in Application.OpenForms)
            {

                if (f.Name == name) return f;

            }

            return null;

        }


http://www.ngui.cc/el/5545752.html

相关文章

c#滚动条创建实例,多线程

1.滚动条 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplicati…

用最小二乘法拟合任意次函数曲线(C#)

///<summary> ///用最小二乘法拟合二元多次曲线 ///</summary> ///<param name"arrX">已知点的x坐标集合</param> ///<param name"arrY">已知点的y坐标集合</param> ///<param name"length&qu…

C#操作快捷方式(获取快捷方式属性、创建快捷方式)

第一步 创建一个项目 无需废话&#xff0c;跳过。 第二步 引用COM组件 右键“引用”&#xff0c;“添加引用”&#xff0c;选择“COM组件”&#xff0c;找到“Windows Script Host Object Model”&#xff0c;然后确定。 第三步 编写创建快捷方式的代码 1 // 声明操作对…

让使用SQLite的.NET应用自适应32位/64位系统

Windows 7 64 bit(刚扩到4G内存,果断换64位的,那速度杠杠的) Microsoft Visual Studio 2010 Ultimate 32bit(在64位系统里运行正常) sqlite-netFx40-setup-bundle-x64-2010-1.0.90.0 首先要先下载SQLite的开发环境安装包(我是这么理解的,貌似只搞到System.Data.SQLite.dll这个文…

C#使用DataContractJsonSerializer来进行JSON解析

在使用DataContractJsonSerializer进行解析之前&#xff0c;我们首先需要将两个包引入进来&#xff1a; using System.Runtime.Serialization; using System.Runtime.Serialization.Json; 接下来需要新建一个class&#xff0c;DataContractJsonSerializer可以将JSON字符串转化…

QT操作sqlite概念

SQLite数据库 增、删、改、查 1. 数据库简介 数据库指的是以一定方式存储在一起&#xff0c;能为多个用户共享&#xff0c;具有尽可能小的冗余度的特点&#xff0c;是与应用程序彼此独立的数据集合。 // 一定方式&#xff1a;可以理解为策略、算法 // 网盘相同的文件是以 MD…

QT中全局变量的定义和使用

多的就不说了&#xff0c;本来就是一个简单地内容&#xff0c;只是不会的话会很头疼 我们首先新建两个文件&#xff0c;文件名可以自定义&#xff0c;我们在这里定义为variate.h 和 variate.cpp 当然了&#xff0c;后缀是不能变的。 和函数一样&#xff0c;我们在variate.h中…

C语言中指针动态内存的申请和释放

什么是动态内存的申请和释放&#xff1f; 当程序运行到需要一个动态变量时&#xff0c;需要向系统的堆中申请一块内存&#xff0c;用来存储这块变量&#xff0c;这就是内存的申请。当程序不需要这个变量时&#xff0c;就需要把申请的这块内存释放掉&#xff0c;这就是内存的释放…

Qt中QPainter基本绘图

QWidget 派系的只能在paintEvent中进行重绘&#xff1b;如果你想要很好的交互功能的话推荐QGraphicsView框架&#xff0c;自定义Item的绘制在paint函数&#xff1b;如果你想利用线程绘制的话&#xff0c;你可以创建个QPixmap或者QImage&#xff0c;然后在把图片当画布在线程中绘…

QSqlQuery类操作SQLite(创建、查询、删除、修改)详解

Qt 提供了 QtSql 模块来提供平台独立的基于 SQL 的数据库操作。这里我们所说的“平台 独立”&#xff0c;既包括操作系统平台&#xff0c;也包括各个数据库平台,Qt支持以下几种数据库: QT自带SQLITE数据库,不需要再安装QTDS在Qt4.7起已经被移除 1.QtSql 要使用QtSql 模块的话…