精华内容
下载资源
问答
  • windows程序设计学习笔记-子窗口控件
    千次阅读
    2016-03-17 07:59:54

    9.子窗口控件

    焦点相关

    鼠标单击消息:
    发送给鼠标位置所在窗口(有子不发父)

    鼠标单击子窗口,若父窗口不是活动窗口,通过给父窗口设置焦点让父窗口成为活动窗口

    窗口有隐藏变显示时,父窗口收到设置焦点消息

    子窗口和父窗口焦点的关系(见7-Checker4)

    默认处理的鼠标消息不会改变父子窗口间的焦点关系

    父子窗口间的焦点转移或子窗口与子窗口间的焦点转移只能通过显示的SetFocus方法来实现。

    空白的窗口有焦点但是外观上看不出来。
    通过我们看到单击子窗口如按钮等,按钮就有了焦点,这其实是因为按钮的默认类中在处理左键时,加上了设置焦点的操作。

    hwndParent = GetParent(hwnd);
    子窗口给父窗口发消息:
    SendMessage(hwndParent, message, wParam, lParam);// message >= WM_USER

    子窗口控件:
    子窗口状态发生改变时,子窗口处理鼠标和键盘的消息,并且通知父窗口。
    既可以创建自己的子窗口控件,也可以利用一些预定义的窗口类和窗口过程,产生标准的子窗口控件。

    程序的父窗口发送消息给子窗口控件,子窗口控件将消息发送回父窗口过程。

    常用的控件种类有:
    按钮,复选框,编辑框, 列表框,组合框,文本字符串,滚动条。

    使用预定义控件时,不需要注册相应子窗口的类,这些类已经存在于windows中并已经有预定义的名称。Windows包含相应的窗口过程,在这些窗口类的基础上,窗口过程处理送往子窗口的消息。

    在对话框中使用窗口子控件时,对话框管理器在你的程序和控件之间增加了一个隔离层。这个对话框管理器帮你做了一些处理工作。
    在窗口表面直接使用子窗口时,没有这个隔离层。

    获取实例句柄:
    1.在WM_CREATE中
    ((LPCREATESTRUCT)lParam)->hInstance
    2.
    GetWindowLong(hwnd, GWL_HINSTANCE);
    3.
    在WinMain中,hInst = hInstance;

    程序终止时,Windows在销毁父窗口的同时销毁这些子窗口。

    9.1.按钮

    对于按钮,在鼠标单击一个按钮时,子窗口控件发送WM_COMMAND给父窗口。
    WM_COMMAND:
    LOWORD(wParam):子窗口ID
    HIWORD(wParam):通知码
    lParam:子窗口句柄

    按钮通知码标识符:
    BN_CLICKED

    // 有条件发送
    BN_PAINT
    BN_HILITE或BN_PUSHED
    BN_UNHILITE或BN_UNPUSHED
    BN_DISABLE
    BN_DOUBLECLICKED或BN_DBLCLK

    // 仅当按钮样式含BS_NOTIFY时发送
    BN_SETFOCUS
    BN_KILLFOCUS

    8个专用于按钮的消息:
    // 获取或设置复选框和单选按钮的状态
    BM_GETCHECK/SETCHECK
    BM_GETSTATE/SETSTATE
    // 允许创建按钮后改变其样式
    BM_SETSTYLE
    BM_CLICK
    BM_GETIMAGE/SETIMAGE

    9.1.1.按钮

    有两种类型的按键按钮控件,窗口样式分别为BS_PUSHBUTTON,BS_DEFPUSHBUTTON。
    在被用于设计对话框时,两类控件的功能是完全不同的。但被用作子窗口控件时,两类按钮的表现基本相同。

    9.1.2.复选框

    开关切换,多个选择
    常见的两类样式:
    BS_CHECKBOX,BS_AUTOCHECKBOX
    对于BS_CHECKBOX按钮控件选择标记的切换由父窗口通过向按钮控件发消息【BM_SETCHECK】来控制。对于BS_AUTOCHECKBOX,按钮控件本身负责切换选定和取消标记。

    另外两个样式:BS_3STATE,BS_AUTO3STATE。这些显示可显示三种状态,选中,未选中,灰色【表示选择是不确定或无关紧要的】

    9.1.3.单选按钮

    单选按钮常用样式:
    BS_RADIOBUTTON,BS_AUTORADIOBUTTON【只用于对话框】
    父控件收到来自单选按钮的WM_COMMAND时,应向其发一条wParam为1的BM_SETCHECK来选中,对组内其他单选按钮发一个wParam为0的BM_SETCHECK。

    9.1.4.组合框

    BS_GROUPBOX。
    既不处理鼠标或键盘输入也不发送WM_COMMAND到父窗口。

    对于以上四类按钮:
    改变/获取窗口标题栏文本【对于按钮就是在按钮中显示的文本】:SetWindowText/GetWindowText

    要接受鼠标和键盘输入,子窗口必须是可见的并且是启用的。
    ShowWindow:来显示或隐藏窗口
    IsWindowVisible:判断窗口是否可见
    EnableWindow:来启用或禁用窗口
    IsWindowEnable:判断窗口是否被启用

    按钮有焦点时,用虚线框标识。
    Windows把输入焦点从一个窗口切换到另一个窗口时,首先向要失去焦点的窗口发WM_KILLFOCUS。
    WM_KILLFOCUS:
    wParam:失去输入焦点窗口的句柄。

    按钮有焦点时,键盘消息都发给了有焦点的按钮,按钮只处理空格键,导致此时按Tab键无反应,无法实现在多个按钮子窗口控件间切换。。【按钮作为对话框子控件因为中间层存在,不存在此问题】

    系统颜色
    SetSysColors/GetSysColor:获取和设置当前窗口的系统颜色。

    COLOR_BTNFACE用于按键按钮的主表面颜色和其他按钮的背景颜色。
    COLOR_BTNSHADOW用在按钮右侧,底部,复选框方块内部,单选按钮圆圈内来表示阴影。
    COLOR_BTNTEXT:按键按钮文本色
    COLOR_WINDOWTEXT:其他控件的文本颜色

    wndclass.hbrBackground//可以直接用上面颜色宏来为其赋值。

    设备环境中默认的文本背景是白色,文本是黑色。可以对设备环境用
    SetBkColor(hdc, GetSysColor(COLOR_BTNFACE))
    SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT))

    系统颜色改变时,windows向所有正在运行程序发WM_SYSCOLORCHANGE

    // 以下只对按键按钮和自绘按钮
    在子窗口即将重绘其客户区时,按钮控件发送WM_CTLCOLORBTN给父窗口。父窗口可以在处理此消息时,改变子窗口背景色。
    WM_CTLCOLORBTN:
    wParam:按钮的设备环境句柄
    lParam:按钮的窗口句柄

    在处理WM_CTLCOLORBTN时,可以:
    SetTextColor
    SetBkColor
    返回子窗口的画刷句柄//子窗口使用此画刷来着色背景

    对于BS_OWNERDRAW:
    lParam:指向DRAWITEMSTRUCT类型结构的指针。这个结构存有必要的信息来帮助程序绘制按钮【对于自绘列表框和菜单项也是如此】。
    这个结构几个重要字段:
    hDC:按钮设备环境
    rcItem:按钮尺寸
    CtlID:控件ID
    itemState:是否按下或有输入焦点ODS_SELECTED【按下标志位】,ODS_FOCUS【焦点标志位】

    9.2.静态类

    此类窗口不接受鼠标或键盘输入,不向其父窗口发送WM_COMMAND消息。

    SS_BLACKRECT,SS_GRAYRECT,SS_WHITERECT
    SS_BLACKFRAME,SS_GRAYFRAME,SS_WHITEFRAME
    SS_ETCHEDHORZ,SS_ETCHEDVERT,SS_ETCHEDFRAME
    文本对齐:
    SS_LEFT,SS_RIGHT, SS_CENTER

    9.3.滚动条

    滚动条控件,是子窗口,可出现在父窗口客户区的任何地方。

    滚动条控件不发送WM_COMMAND到父窗口,类似窗口滚动条,他们向父窗口发送WM_VSCROLL,WM_HSCROLL。
    WM_VSCROLL/WM_HSCROLL:
    lParam:0,说明是窗口滚动条。或滚动条控件句柄

    GetSystemMetrics(SM_CYHSCROLL):水平滚动条高度
    GetSystemMetrics(SM_CXVSCROLL)
    :垂直滚动条高度

    SBS_LEFTALIGN, SBS_RIGHTALIGN, SBS_TOPALIGN, SBS_BOTTOMALIGN
    上面这些只针对对话框中的滚动条。

    窗口子类技术:
    OldWndProc = (WNDPROC) SetWindowLong (hwnd,
    GWL_WNDPROC, (LONG) NewProc) ;
    使本来发给窗口过程的消息现在发给NewProc,这个窗口过程。
    LRESULT CALLBACK NewProc (HWND hwnd, UINT message,
    WPARAM wParam, LPARAM lParam)
    // 在其中处理了必要的消息后,可以通过 return CallWindowProc (OldWndProc, hwnd, message, wParam, lParam) ;把其他消息传给原窗口过程处理。
    在使用预定义窗口类时,希望对某些消息做特殊处理时十分有效。
    SetClassLong (hwnd, GCL_HBRBACKGROUND, (LONG)hBrush)

    9.4.编辑类

    编辑控件向其父窗口过程发送WM_COMMAND消息
    LOWORD(wParam):子窗口ID
    HIWORD(wParam):通知码
    lParam:窗口句柄

    常见通知码举例:
    EN_SETFOCUS:得焦点
    EN_KILLFOCUS:
    EN_CHANGE:内容将变化
    EN_UPDATE:内容已变化
    EN_ERRSPACE:没有空间了
    EN_MAXTEXT:没有空间完成插入了
    EN_HSCROLL:水平滚动条被单击了
    EN_VSCROLL:垂直滚动条被单击了

    SetWindowText:把文本插入编辑框
    GetWindowText/GetWindowTextLength:获取文本

    给编辑控件发消息:
    WM_CUT
    WM_COPY
    WM_CLEAR
    WM_PASTE

    EM_GETSELEM_SETSEL/:获取/设置选择文本起始位置
    EM_REPLACESEL:文本替换
    EM_GETLINECOUNT
    EM_LINEINDEX:从起点到某行的位移量
    EM_LINELENGTH:得行长
    EM_GETLINE:复制某行到缓冲区

    9.5.列表框

    将一批文本字符串显示在一个具有滚动功能的方框中的控件。
    列表框控件几乎总包含LBS_NOTIFY样式,来使父窗口收到从列表框发来的WM_COMMAND消息。如果想让列表框项目进行排序,可使用样式LBS_SORT。
    默认下列表框是单选的。可用LBS_MULTIPLESEL设置多选。
    默认下列表框中添加了新项时,列表框自动更新,可用LBS_NOREDRAW来阻止。可用WM_SETREDRAW来暂时阻止。
    WS_BORDER:边框效果
    WS_VSCROLL/WS_HSCROLL:添加水平或垂直滚动条
    WS_SIZEBOX:允许调整大小
    WS_CAPTION:允许移动

    往列表框SendMessage成功返回,LB_OKAY
    向列表框添加字符串:
    LB_ADDSTRING
    对LBS_SORT样式:
    SendMessage(hwndList, LB_ADDSTRING, 0 , (LPARAM)szString)
    LB_INSERTSTRING
    SendMessage(hwndList, Lb_INSERTSTRING, iIndex, (LPARAM)szString)// 下标从0计
    LB_DELETESTRING
    LB_RESETCONTENT:清除所有
    WM_SETREDRAW:关闭/打开重绘标志
    SendMessage(hwndList, WM_SETREDRAW, FALSE/TRUE, 0)

    LB_GETCOUNT:获取项目数
    LB_GETTEXTLEN:获取某项字符串长度
    LB_GETTEXT:把某项复制到缓冲区。缓冲区要大的能包含字符串和结束符

    对单选列表框:
    LB_SETCURSEL:设置默认选中项
    LB_SELECTSTRING:寻找首个与搜索字符串匹配的项目,没找到匹配返回LB_ERR
    LB_GETCURSEL:获取当前选择项,没项目被选中,返回LB_ERR

    对多选框:
    LB_SETSEL:设置某项选中状态
    SendMessage(hwndList, LB_SETSEL, 0/1, iIndex)
    LB_GETSEL:获取某项选中状态
    iSelect = SendMessage(hwndList, LB_GETSEL, iIndex, 0)//选中返回非0值,没选中,返回0

    当一个列表框具有输入焦点时,光标移动键,字符键,空格键,可用于从中选择项目。

    对话框相关

    HWND WINAPI CreateDialogParam(
    In_opt HINSTANCE hInstance,
    In LPCTSTR lpTemplateName,
    In_opt HWND hWndParent,
    In_opt DLGPROC lpDialogFunc,
    In LPARAM dwInitParam
    );

    // 无参数传递版本
    HWND WINAPI CreateDialog(
    In_opt HINSTANCE hInstance,
    In LPCTSTR lpTemplate,
    In_opt HWND hWndParent,
    In_opt DLGPROC lpDialogFunc
    );

    //

    创建一个非模态对话框从对话框模板资源。显示对话框前,函数传递一个应用定义值给对话框处理过程的WM_INITDIALOG
    消息的lParam参数。应用可使用此值来初始化对话框。
    hInstanc:一个句柄指向包含对话框模板的模块。为NULL时,模板用当前可执行程序。
    lpTemplateName:
    可以是一个字符串指定对话框模板的名字 或 一个整数指定对话框资源标识。
    如果参数指定资源标识,高位须是0,低位包含标识。
    可以 MAKEINTRESOURCE创建此值。
    hWndParent:句柄指向拥有对话框的窗口
    lpDialogFunc :指针指向对话框处理过程
    dwInitParam:传递给对话框处理过程 WM_INITDIALOG消息的lParam参数的值。

    返回值:
    成功,对话框句柄。
    失败,NULL

    要支持键盘导航和其他对话框功能,对话框的消息循环需要调用 IsDialogMessage.
    在主程序的消息循环里要判断对话框句柄不存在或消息不是对话框的消息才能让消息进入主程序中的翻译和派发

    INT_PTR CALLBACK DialogProc(
    In HWND hwndDlg,
    In UINT uMsg,
    In WPARAM wParam,
    In LPARAM lParam
    );

    应用定义的回调函数。在 CreateDialog 和 DialogBox 此类函数中使用。
    处理发给模态或非模态对话框的消息。

    hwndDlg:句柄指向对话框。
    uMsg :消息
    wParam:消息参数
    lParam:消息参数

    返回值:
    典型地,如果对话框处理过程处理了消息,返回TRUE。否则,FALSE。
    如果对话框处理过程返回FALSE,对话框管理器执行默认对话框操作来回复此消息。
    如果对话框处理过程处理一个消息,此消息需要一个特定返回值。对话框处理过程
    应该设置想要的返回值通过调用SetWindowLong在返回TRUE之前。

    以下消息对上面陈述的规则来说是例外。咨询文档来获取指定消息返回值的具体语义。
    WM_CHARTOITEM
    WM_COMPAREITEM
    WM_CTLCOLORBTN
    WM_CTLCOLORDLG
    WM_CTLCOLOREDIT
    WM_CTLCOLORLISTBOX
    WM_CTLCOLORSCROLLBAR
    WM_CTLCOLORSTATIC
    WM_INITDIALOG
    WM_QUERYDRAGICON
    WM_VKEYTOITEM

    INT_PTR WINAPI DialogBox(
    In_opt HINSTANCE hInstance,
    In LPCTSTR lpTemplate,
    In_opt HWND hWndParent,
    In_opt DLGPROC lpDialogFunc
    );

    用对话框模板资源创建一个模态对话框。
    DialogBox不返回控制,直到指定的回调函数通过调用EndDialog来终止模态对话框。

    hInstance:指向包含对话框模板模块的句柄。为NULL时,模块为当前可执行程序。
    lpTemplate :
    可以是一个字符串指定对话框模板的名字 或 一个整数指定对话框资源标识。
    如果参数指定资源标识,高位须是0,低位包含标识。
    可以 MAKEINTRESOURCE创建此值。
    hWndParent :句柄指向拥有对话框的窗口
    lpDialogFunc :指针指向对话框处理过程

    返回值:
    成功, 返回值是 在调用EndDialog来终止对话框中的nResult参数。
    失败,
    若由hWndParent无效导致,返回值为0.
    其他原因导致的失败,返回-1.

    函数显示对话框,无论对话框模板是否指定了WS_VISIBLE。让拥有其窗口 无效,开始它自己的消息循环来为对话框自己获取和分发消息。

    当对话框处理过程调用EndDialog,DialogBox销毁对话框,结束消息循环,使能拥有窗口(如窗口之前为使能的话),返回EndDialog中的nResult参数。

    更多相关内容
  • 在VS2015中,可以通过API函数获取Windows窗口控件的信息,包括控件句柄、控件显示的文字以及控件类型等。其流程为,首先获取Windows指定窗口的句柄,之后通过回调函数遍历该窗口中的控件句柄,最后通过控件句柄...

    在VS2015中,可以通过API函数获取Windows窗口中控件的信息,包括控件句柄、控件显示的文字以及控件类型等。其流程为,首先获取Windows指定窗口的句柄,之后通过回调函数遍历该窗口中的控件句柄,最后通过控件句柄获取控件文字及类型。

    1 获取窗口句柄

    可以通过FindWindow()函数获取指定窗口的句柄。该函数的格式为

    HWND FindWindowA(
    
    LPCSTR lpClassName
    
    , LPCSTR lpWindowName
    
    );

    其中,参数lpClassName指定了窗口所属的类名;lpWindowName指定了窗口的标题。如果函数执行成功,则返回指定窗口的句柄,否则返回值是NULL。

    通过FindWindow()函数,有两种方法获取指定窗口句柄。一种方法是指定窗口所属的类名称,另外一种是指定窗口的标题。例如,在Windows中,可以通过鼠标右键可以查看某个文件的属性,该属性窗口为图1所示。

     

    图1 png文件属性窗口

    可以通过以下代码获取该窗口的句柄

    HWND hwnd;
    
    hwnd = FindWindow(NULL, L"图片1.png 属性");

    其中,HWND是窗口句柄类型,FindWindow()函数的第一个参数是NULL,第二个参数指定了窗口的标题,即通过窗口标题查找窗口。

    2 遍历窗口控件。

    如果成功获取了指定窗口句柄,接下来调用API函数EnumChildWindows()函数开始遍历控件。

    2.1 EnumChildWindows()函数

    该函数的格式为

    BOOL EnumChildWindows(
    
    HWND hWndParent
    
    , WNDENUMPROC lpEnumFunc
    
    , LPARAM lParam
    
    );

    其中参数hWndParent是指定窗口的句柄;lpEnumFunc是一个系统定义好的回调函数,系统会将窗口中每个控件的句柄依次给这个回调函数,并依次调用该回调函数。在lpEnumFunc回调函数中通过控件的句柄获取控件的信息;lParam是传递给回调函数的参数。如果每次调用回调函数成功,则EnumChildWindows()函数直到所有的控件都被遍历后才会返回TRUE,如果回调函数调用失败,则EnumChildWindows()函数直接返回FALSE。

    展开全文
  • 2.2 回调函数 2.2.1 函数格式 在“2.1 EnumChildWindows()函数”中提到,调用EnumChildWindows()函数前,需要定义一...在获取到控件信息后,可以通过printf()函数将控件信息显示到控制台窗口中,如图2所示。

    2.2 回调函数

    2.2.1 函数格式

    在“2.1 EnumChildWindows()函数”中提到,调用EnumChildWindows()函数前,需要定义一个WNDENUMPROC类型的回调函数。该回调函数的格式为

    BOOL CALLBACK EnumChildProc(
    
      _In_ HWND   hwnd,
    
      _In_ LPARAM lParam
    
    );

    其中,参数hwnd是窗口中控件的句柄;lParam是EnumChildWindows()传递过来的参数,即第三个参数。

    2.2.2 注意事项

    在使用该回调函数时需要注意的是:

    (1)返回值

    如果需要继续遍历控件,则函数的返回值必须是TRUE,如果不需要再遍历控件,则返回FALSE。

    (2)函数名

    回调函数的函数名不一定是EnumChildProc。只要定义回调函数时的函数名与EnumChildWindows()函数中第二个参数相同即可。

    2.2.3 获取控件信息

    在回调函数中,通过控件句柄hwnd和API函数GetWindowText()以及GetClassName()函数获取控件显示的文字和控件对应的类名。

    (1)GetWindowText()函数

    GetWindowText()函数的作用是获取窗口标题栏的文字。该函数的格式为

    int GetWindowTextW(
    
    HWND hWnd
    
    , LPWSTR lpString
    
    , int nMaxCount
    
    );

    其中,参数hWnd是窗口的句柄;lpString是保存获取到文字的字符串;nMaxCount是字符串的最大长度。如果获取标题栏文字成功,则GetWindowText()函数返回标题栏文字的长度,否则返回0。

    使用GetWindowText()函数获取控件显示文字的代码如下所示

    wchar_t wchText[255];        
    
    GetWindowText(hwnd, wchText, 255);

    其中,GetWindowText()函数的第一个参数是回调函数EnumChildProc的第一个参数,即控件的句柄。获取到的控件显示文字保存在宽字符数字wchText中。

    (2)GetClassName()函数

    GetClassName()函数的作用是获取指定窗口所属的类的名称。该函数的格式为

    int GetClassName(
    
    HWND hWnd
    
    , LPTSTR lpClassName
    
    , int nMaxCount
    
    );

    其参数和返回值含义与GetWindowText()函数相同。通过GetClassName()函数获取控件所属类名的代码如下所示。

    wchar_t wchClass[255];       
    
    GetClassName(hwnd, wchClass, 255);

    在获取到控件信息后,可以通过printf()函数将控件信息显示到控制台窗口中,如图2所示。

    展开全文
  • windows获取控件名称的工具,用来获取桌面控件的名称,比spy++ 好用
  • C# WPF MDI 窗口控件互操作,用的是System.Windows.Window窗口,并非Form。从主窗口打开子窗口,子窗口上的WPF控件控制主窗口上的控件。极为简单易学的例子程序。适用于WPF初学者。
  • 十四、windows窗体高级控件

    千次阅读 2022-02-14 23:17:30
    PictureBox控件 PictureBox控件可以显示来自位图、图标或者原文件,以及来自增强的元文件、Jpeg或GIF文件的图形。如果控件不足以显示整幅图像,则捡钱图像以适应控件的大小 using System; using System....

    1 PictureBox控件

    • PictureBox控件可以显示来自位图、图标或者原文件,以及来自增强的元文件、Jpeg或GIF文件的图形。如果控件不足以显示整幅图像,则捡钱图像以适应控件的大小
      在这里插入图片描述
      在这里插入图片描述
    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 _1_PictureBox
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                label3.Visible = false;
                label4.Visible = false;
                label5.Visible = false;
                label6.Visible = false;
                label7.Visible = false;
            }
    
            private void radioNomal_CheckedChanged(object sender, EventArgs e)
            {
                pictureBox1.SizeMode = PictureBoxSizeMode.Normal;
                label3.Visible = true;
                label4.Visible = false;
                label5.Visible = false;
                label6.Visible = false;
                label7.Visible = false;
            }
    
            private void radioStretchImage_CheckedChanged(object sender, EventArgs e)
            {
                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                label3.Visible = false;
                label4.Visible = true;
                label5.Visible = false;
                label6.Visible = false;
                label7.Visible = false;
            }
    
            private void radioAutoSize_CheckedChanged(object sender, EventArgs e)
            {
                pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
                label3.Visible = false;
                label4.Visible = false;
                label5.Visible = true;
                label6.Visible = false;
                label7.Visible = false;
            }
    
            private void radioCenterImage_CheckedChanged(object sender, EventArgs e)
            {
                pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                label3.Visible = false;
                label4.Visible = false;
                label5.Visible = false;
                label6.Visible = true;
                label7.Visible = false;
            }
    
            private void radioBZoom_CheckedChanged(object sender, EventArgs e)
            {
                pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
                label3.Visible = false;
                label4.Visible = false ;
                label5.Visible = false;
                label6.Visible = false;
                label7.Visible = true ;
            }
        }
    }
    
    

    在这里插入图片描述

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace _1_PictureBox
    {
        public partial class showPicture : Form
        {
            public showPicture()
            {
                InitializeComponent();
            }
    
    
            public int i = 0; //图片索引参数
            public string[] path = Directory.GetFiles(@"C:\Users\Admin\Desktop\Images\");  //Directory需要引入命名空间using System.IO
            private void 图片查看器_Load(object sender, EventArgs e)
            {
                //设定图片如何在PictureBox中显示
                pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
                //设定PicturBox默认显示图片
                pictureBox1.Image = Image.FromFile(path[i]);
                
                //获取指定文件夹下所有文件的全路径
               
                //下面循环仅仅是验证获取的路径都是什么文件路径,与此示例功能无关
                //foreach (string  onePicturePath in path)
                //{
                //    MessageBox.Show(onePicturePath); //是路径下所有的文件,不仅仅是图片文件
                //    //Console.WriteLine(onePicturePath); //不能空控制台输出
                //}
    
            }
            private void button1_Click(object sender, EventArgs e)
            {
                i--;
                if (i < 0) i = path.Length - 1; //翻到第一张后此时i变为负数,将i重新赋值为“总长度-1”即最后一张索引值,从而达到训话浏览
                pictureBox1.Image = Image.FromFile(path[i]);
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                i++;
                if (i > path.Length - 1) i = 0;//i大于总长度减一,即翻到最后一张后又点击了一次下一张,此时翻到第一张
                pictureBox1.Image = Image.FromFile(path[i]);
            }
        }
    }
    
    

    2 ImageList控件

    • ImageList,又叫存储图像控件,用来存储图像的组合,但它不能显示图像,要显示它存储的图像需要借用第二个控件
    • 第二个控件是包含ImageList属性的控件(例如:ListView或TreeView),这个属性一般和ImageIndex属性一起使用。ImageList属性设置为ImageList组件的一个实例,ImageIndex属性设置为ImageList中对应图像的索引
    • ImageList控件两个常用属性
      • ImageSize用来设置图像的大小,Width属性和Height属性,用来设置图像的宽和高,其默认值都为16,取值范围1~256之间。
      • ColorDepth,用来设置颜色深度,取值为4位~32位。
    • ImageList一个方法
      • Draw:用于绘制指定的图像(可以理解为显示图像)
        在这里插入图片描述
        add()和addstrip()的区别 :AddStrip图像条方法的宽度必须为整数(是ImageList.size的整数倍),否则会发生异常

    在这里插入图片描述

    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 _3_ImageList控件
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button3_Click_1(object sender, EventArgs e)
            {
                //声明一个图像变量
                Image image1 = Image.FromFile(@"C:\Users\Admin\Desktop\Images\1.png");
    
                
    
                //imageList控件添加元素的方法
                //方法1,添加单个元素
                imageList1.Images.Add(image1);
    
                //创建了一个窗口句柄(Handle) H wnd(windows)
                Graphics mygph = Graphics.FromHwnd(this.Handle);
                //Draw有三种方法
                //第一种 (graphics对象,左上角点坐标,索引值)
                imageList1.Draw(mygph, new Point(50, 50), 0);  //第一个参数是句柄,第二个参数是图片显示起始位置(图片左上角的位置,用于定位图片),第三个参数是图片索引值,即ImageList中的图片索引
                //第二种:(graphics对象,水平坐标,垂直坐标,索引值)
                //第三种:(graphics对象,水平坐标,垂直坐标,图像宽度,图像高度,索引值)
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                //imageList控件添加元素的方法
                //方法2  一次添加多个元素
                Image image2 = Image.FromFile(@"C:\Users\Admin\Desktop\Images\2.png");
                Image image3 = Image.FromFile(@"C:\Users\Admin\Desktop\Images\3.png");
                Image image4 = Image.FromFile(@"C:\Users\Admin\Desktop\Images\4.png");
                Image[] images = { image2, image3, image4 };
                imageList1.Images.AddRange(images);
    
                //方法3  AddStrip
                Image image5 = Image.FromFile(@"C:\Users\Admin\Desktop\Images\5.png");
                Image image6 = Image.FromFile(@"C:\Users\Admin\Desktop\Images\6.png");
                imageList1.Images.AddStrip(image5);
                imageList1.Images.AddStrip(image6);
    
    
                //创建了一个窗口句柄(Handle) H wnd(windows)
                Graphics mygph = Graphics.FromHwnd(this.Handle);
    
                for (int i = 0; i < imageList1.Images.Count; i++)
                {
                    imageList1.Draw(mygph, new Point(50, 50), i);
                    //因为显示速度太快,给线程添加一个休眠时间;
                    System.Threading.Thread.Sleep(1000);
                }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                //删除imageList对象的方法
                //removeAt(索引值)
                imageList1.Images.RemoveAt(5);
                imageList1.Images.RemoveAt(4);
                imageList1.Images.RemoveAt(3);
    
            }
        }
    }
    

    3 ListView控件

    • ListView控件是Windows列表视图控件,该控件显示可用五种不同视图之一显示的向集合
      • LargeIcon:在想文本胖显示大图标,如果控件足够大,则显示在多列中
      • SmallIcon:除显示小图标外,其他方面与大图标视图模式相同
      • List:显示小图标,单总是显示在单列中。
      • Details:在多列中显示向。
      • Tile:每个向都显示一位一个完整大小的图标,在他的右边带向标签和子项信息(仅支持XP/SERVER2003)

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    using System;
    using System.Windows.Forms;
    
    namespace _5_ListView
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                String[,] myCountry = { { "China", "中国", "北京" }, { "Korea", "韩国", "首尔" }, { "Canada", "加拿大", "渥太华" }, { "American", "美国", "纽约" }, { "Jpan", "日本", "东京" }, { "SingPore", "新加坡", "新加坡" }, { "UK", "英国", "伦敦" }, { "Vietnam", "越南", "河内" }, };
                for (int i=0; i < myCountry.Length/3; i++)    //length获取数组的长度,是指最小元素的数量。例如上面数组共24个元素。
                {
                   
                    ListViewItem mylvi = listView1.Items.Add(i.ToString());   //可以理解为添加了一个对象名称,或者行名称
                    mylvi.ImageIndex = i;
                    mylvi.SubItems.Add(myCountry[i,0]);
                    mylvi.SubItems.Add(myCountry[i,1]);
                    mylvi.SubItems.Add(myCountry[i,2]);
    
                }
    
            }
    
            private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (comboBox1.SelectedItem.ToString() == "LargeIcon") listView1.View = View.LargeIcon;
                if (comboBox1.SelectedItem.ToString() == "SmallIcon") listView1.View = View.SmallIcon;
                if (comboBox1.SelectedItem.ToString() == "Details") listView1.View = View.Details;
                if (comboBox1.SelectedItem.ToString() == "List") listView1.View = View.List;
                if (comboBox1.SelectedItem.ToString() == "Tile") listView1.View = View.Tile;
    
            }
        }
    }
    
    

    在这里插入图片描述

    4、TreeView控件

    • Tree View控件可以为用户显示节点层次结构,就想在Windows资源管理器功能的左创个中显示文件和文件夹一样。树视图中的各个节点可能包含其他节点。称为子节点。用户可以按照展开或折叠的方式显示父节点或包含子节点的节点。通过将树是的CheckBoxes属性设置为True,还可以在节点旁边显示带有复选框的树视图。
    • 添加和算出树节点
    • Tree View控件以层侧结构的方式显示节点,Nodes属性包含舒适图中的顶级节点列表,它是TreeNode对象集合。
    • 添加节点:先创建TreeNode对象,然后通过Nodes的Add方法创建的TreeNode对象添加为TreeView节点;
    • 删除节点,可用Nodes属性的Remove方法或RemoveAt方法
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    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 TreeView
    {
        public partial class Form1 : Form
        {
            public string[] nodeName = new string[100];
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                TreeNode mytn = new TreeNode();    //实例化一个树节点对象
                if (textBox1.Text.Trim() != "")
                {
                    mytn.Text = textBox1.Text.Trim();  //给节点对象赋值
                    treeView1.Nodes.Add(mytn);         //将节点添加到TreeView控件中
                }
                else
                {
                    MessageBox.Show("请先添加节点的名称");
                }
                
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                TreeNode mytn = new TreeNode();    //实例化一个树节点对象
                if (textBox1.Text.Trim() != "")
                {
                    mytn.Text = textBox1.Text.Trim();  //给节点对象赋值
                    treeView1.SelectedNode.Nodes.Add(mytn);
                }
                else
                {
                    MessageBox.Show("请先添加节点的名称");
                }
            }
    
            private void button3_Click(object sender, EventArgs e)
            {
                TreeNode mytn = new TreeNode();
                mytn = treeView1.SelectedNode;
                if (mytn.Nodes.Count > 0)
                {
                    DialogResult myDR = MessageBox.Show("该节点下有子节点不允许删除,请先删除子节点");
                }
                else
                {
                    mytn.Remove();
                }
               
    
            }
    
            private void button4_Click(object sender, EventArgs e)
            {
                TreeNode mytn = new TreeNode();
                mytn = treeView1.SelectedNode;
                if (textBox1.Text.Trim() != "")
                {
                    if(((System.Collections.IList)nodeName).Contains(textBox1.Text) != true) mytn.Text = textBox1.Text.Trim();
                    else MessageBox.Show("已经存在\""+textBox1.Text+"\"的节点不能重复添加","错误提示");
                }
                else
                {
                    MessageBox.Show("请先添加节点的名称");
                }
            }
    
            private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                //TreeNode mytn = new TreeNode();
                //mytn = treeView1.SelectedNode;
                //MessageBox.Show(mytn.Text);
               
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                int i = 0;
                foreach (TreeNode mynode in treeView1.Nodes)
                {
                    nodeName[i] = mynode.Text;
                    i++;
                }
                       
            }
        }
    }
    
    

    5、DateTimePicker控件使用户可以从日期

    • DateTimePicker控件使用户可以从日期或时间列表中选择打个项。在用来日期时,显示为两部分,即一个下拉列表和一个类似于MonthCalendar控件的网格。
    • 显示时间
      - DateTimePicker控件默认是显示日期,显示时间时,必须将ShowUpDown属性设置为true,将Format属性设置为Time。
      -
      在这里插入图片描述
      在这里插入图片描述
    • 自动以格式显示日期
      - 想要DateTimePicker控件以自定义格式显示日期,就的湘江Format属性设置为Custom,然后将CustomFormat属性设置为一个格式字符串
      在这里插入图片描述

    在这里插入图片描述

    • DateTimepicker控件中当选定的日期和事件有Value属性确定。默认情况下,此空间的Value属性设置为当前日期。如果在代码中更改了此空间的Value属性,则此空间在窗体上自动更新一反应新设置。Value属性将DateTime结构作为它的值返回,有若干个DateTime结构的属性返回关于显示日期的特定信息。这些属性只用用于返回值,而不能用来设置值。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    using System;
    using System.Windows.Forms;
    
    namespace _8_DateTimePicker控件
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
            {
                string tg = "甲乙丙丁午己庚辛壬癸";
                string dz = "子丑寅卯辰巳午未申申酉戌亥";
                string sx = "鼠牛虎兔龙蛇马羊猴鸡狗猪";
                int year = dateTimePicker1.Value.Year;
                label1.Text = "您选择的年为:农历" + tg[(year - 4) % 10] + dz[(year - 4) % 12] + "年,生肖是" + sx[(year - 4) % 12] + "年";
    
            }
        }
    }
    
    

    6、MonthCalendar控件

    • MonthCalendar控件是用来查看和设置日期信息。它是一个可视化网络图形界面,网格内包含月份的编号日期,这些日期排列在周一~周日下方的七个列表中。用户可以单击月份标题任何一侧的箭头按钮来选择不同的月份。该控件还有一个更强的功能。就是可以选择日期范围。

    • 以粗体显示特定日期

    • MonthCalendar控件以粗体显示特殊的日期或重要出现的日子,用此控件显示特殊日期的属性有三个:
      - BoldedDates属性包含单个日期,(仅设置单个日期以粗体显示,上/下一个月以及上一年/下一年的日期都不影响)
      - AnnuallyBoldeDates属性包含每年以粗体显示的日期;(设置每年的同一日期粗体显示)
      - MonthlyBoleedDates属性包含每月以粗体显示的日期;(设置每月的同一日期粗体显示)
      - 这三个属性中的每一个都包含有一个DateTime对象数组。若要从这些列表中添加或移除日期,必须添加或移除DateTime对象。

    • 显示多个月份
      - MonthCalendar控件可显示多个月份,最多可同时显示十二个月。默认情况下,控件只显示一个月,用户可通过CalendarDimensions属性来设置要显示的月份个数,它有两个属性width属性和height属性,分别用来设置列数和行数。在设置或更改月历尺寸时,控件的大小也会随之改变:因此应确保窗体上有足够的空间共新尺寸用。

    • 选择日期范围

      • MaxDate属性和MinDate属性:这两个属性分别用来设置选择的最大日期和最小日期
      • 注意:如果代码中设置日期范围,则MaxDate属性和MinDate属性的值都为DateTime对象。
    • 更改外观(在win7及以后的系统中已经被放弃)
      起作用的前提是按照下图所示进行设置设置,
      在这里插入图片描述

    在这里插入图片描述

    ErrorProvide控件

    • ErrorProvider控件可以对窗体或控件上的用户输入进行验证。当验证用户在窗体中输入或显示的数据集的内部错误时,一般要用该控件。
    • ErrorProvide控件的主要属性是DataSource(与数据库相关)、ContainerControl和Icon。将ErrorProvider控件与数据绑定控件结合使用时,必须要将containerControl属性设置为相应的容器(通常是Windows窗体),以便于该组件可以在窗体上显示错误图标。
    • Icon属性可以设置为自定义错误图标而不是默认图标。
    • 设置DataSource属性后,ErrorProvider控件可为数据集显示错误信息
    • ErrorProvider控件的主要方法时SetError方法,该方法可以指定错误信息字符串和错误图标应出现的位置。其使用格式为:Errorprovider变量名.SetError(需要在哪个控件旁边显示信息(textBox1),显示错误的信息的字符串(您输入的数据不正确))
      在这里插入图片描述
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace _12_ErrorProvider控件
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
               
            }
    
            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                if (textBox1.Text.Length < 8 || textBox1.Text.Length > 10)
                {
                    errorProvider1.SetError(textBox1, "用户名必须为8~12位");
                    errorProvider1.Icon = new Icon(@"E:\C#\project\Windows窗体高级控件\ico\error.ico");
                }
                else
                {
                    errorProvider1.SetError(textBox1, "通过验证");
                    errorProvider1.Icon = new Icon(@"E:\C#\project\Windows窗体高级控件\ico\true.ico");
    
                }
            }
    
            private void textBox3_TextChanged(object sender, EventArgs e)
            {
                if (textBox3.Text != textBox2.Text)
                {
                    errorProvider2.SetError(textBox3, "两次输入的密码不一致");
                    errorProvider2.Icon = new Icon(@"E:\C#\project\Windows窗体高级控件\ico\error.ico");
                }
                else
                {
                    errorProvider2.SetError(textBox3, "通过验证");
                    errorProvider2.SetError(textBox2, "通过验证");
                    errorProvider2.Icon = new Icon(@"E:\C#\project\Windows窗体高级控件\ico\true.ico");
                }
    
            }
        }
    }
    
    

    HelpProvide控件

    • HelpProvide控件用于将html帮助文件(.btm文件或chm文件)与windows应用程序相关联。用户可通过多种方式提供帮助:
      - HelpNamespace属性将帮助文件与HelpProvider组件相关联;关联后需要设置窗体的HelpProvidershowHelp才可以在按下F1键后弹出帮助文件。
      在这里插入图片描述

    在这里插入图片描述
    - 通过调用SetHelpNavigator并提供指定控件的HelpNavigator枚举值来指定提供的帮助类型:
    在这里插入图片描述

    	 - 通过调用setHelpKeyWord方法为帮助提供关键字或主题
    

    在这里插入图片描述

    注:网页可以用 Web DreamWeaver编辑器编辑网页帮助文档,chm可以用Easy chm进行编辑.

    在这里插入图片描述

    ProgressBar控件

    • ProgressBar控件通过在水平条中显示响应数据的矩形来只是操作的进度。操作完成时,进度栏被填满。进度栏通常用于帮助用户了解等待一项长时间的操作(例句,加载大文件)完成所需的事件
    • ProgressBar控件主要属性有value、setp、minimum和maximum。Minimum和Maximum属性设置进度栏可以显示的最大值和最小值;Value属性标识操作过程中已完成的进度:Step属性用于指定Value属性定增的值。
    • 除直接设置Value属性修改ProgressBar控件显示的值外,还可以使用Increment方法来指定Value属性递增的值。
    • 其格式为:ProgressBar对象.Inrement(进度值)
    • ProgressBar一个重要的方法时PerformStep方法,主要用于递增该值Stem属性指定Value属性递增值
    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 ProgressBar
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                //progressBar1.Value = 1000;
                //progressBar1.Increment(1500);
    
    
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                progressBar1.PerformStep();
            }
        }
    }
    
    

    实例:
    在这里插入图片描述

    using System;
    using System.Windows.Forms;
    
    namespace ProgressBar
    {
        public partial class Form1 : Form
        {
            //日志输出方法
            public void outlog(string str)
            {
                textBox2.AppendText(DateTime.Now.ToString() + str + "\r\n");
            }
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                btnSet.Enabled = true;
                btnStart.Enabled = false;
                btnPause.Enabled = false;
                btnStop.Enabled = false;
    
    
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                progressBar1.PerformStep();
            }
    
            private void btnSet_Click(object sender, EventArgs e)
            {
                try
                {
                    if (tbSettime.Text.Trim() != "")
                    {
                        progressBar1.Minimum = 0;
                        progressBar1.Maximum = Convert.ToInt32(tbSettime.Text);
                        progressBar1.Step = -1;
                        progressBar1.Value = progressBar1.Maximum;
                        btnSet.Enabled = false;
                        btnStart.Enabled = true;
                        textBox2.AppendText("========================================================\r\n");
                        outlog("时间正确设置,请点击开始键继续。。。");
    
                    }
                    else
                    {
                        MessageBox.Show("请输入正确的秒数,必须为正整数");
                    }
                }
                catch (Exception)
                {
    
                    MessageBox.Show("请输入正确的秒数,必须为正整数");
                }
            }
    
            private void btnStart_Click(object sender, EventArgs e)
            {
                btnStart.Enabled = false;
                btnPause.Enabled = true;
                btnStop.Enabled = true;
                timer1.Enabled = true;
                timer1.Interval = 1000;
                timer1.Start();
            }
    
            private void timer1_Tick_1(object sender, EventArgs e)
            {
                if (progressBar1.Value > progressBar1.Minimum)
                {
                    progressBar1.PerformStep();
                    outlog("进度条工作正在进行,已经完成了" + Convert.ToInt32(((1 - Convert.ToDouble(progressBar1.Value) / Convert.ToDouble(progressBar1.Maximum)) * 100)).ToString() + "%");
                    //(最大值-当前值)/最大值=进度百分比
                    // 1-当前值/最大值=进度百分比
                }
                else
                {
                    outlog("进度已经完成");
                    timer1.Stop();
                    btnSet.Enabled = true;
                    btnStart.Enabled = false;
                    btnPause.Enabled = false;
                    btnStop.Enabled = false;
                }
            }
    
            private void btnPause_Click(object sender, EventArgs e)
            {
                if (timer1.Enabled == true)
                {
                    outlog("进度已经被暂停");
                    btnPause.Text = "继续";
                    timer1.Stop();
                }
                else
                {
                    outlog("进度条继续工作");
                    btnPause.Text = "暂停";
                    timer1.Start();
                }
            }
    
            private void btnStop_Click(object sender, EventArgs e)
            {
                outlog("进度条停止工作\r\n===================");
                timer1.Enabled = false;
                progressBar1.Value = 0;
                btnPause.Enabled = false;
                btnSet.Enabled = true;
                btnStart.Enabled = false;
                btnStop.Enabled = false;
                btnPause.Text = "暂停";
            }
        }
    }
    
    

    任务实施

    在这里插入图片描述
    在这里插入图片描述

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace 任务实施
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void btnAdd_Click(object sender, EventArgs e)
            {
                ListViewItem myLVI = lv1.Items.Add((lv1.Items.Count + 1).ToString());
                myLVI.SubItems.Add(tbName.Text);
                myLVI.SubItems.Add(cbGender.Text);
                myLVI.SubItems.Add(TbTel.Text);
                myLVI.SubItems.Add(tbDepartment.Text);
                myLVI.SubItems.Add(DTPJOinTime.Value.ToString("yyyy年MM月dd日"));
                tbName.Clear();
                cbGender.Text = "";
                TbTel.Clear();
                tbDepartment.Clear();
                DTPJOinTime.Value = DTPJOinTime.MaxDate;
                tbName.Focus();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                //设置时间最大值为当前日期,并将最大值复制给value
                DTPJOinTime.MaxDate = DateTime.Now;
                DTPJOinTime.Value = DTPJOinTime.MaxDate;
                progressBar1.Maximum = 5;
                progressBar1.Minimum = 0;
                progressBar1.Step = 1;
                pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
                pictureBox1.Image = Image.FromFile(@"E:\C#\project\Windows窗体高级控件\任务实施\banner\雪上行者.PNG");
            }
    
            private void btnModi_Click(object sender, EventArgs e)
            {
                //修改选定内容,首先判断是否有选定的内容,选定的项目数量大于0代表有被选中
                if (lv1.SelectedItems.Count > 0)
                {
                    lv1.SelectedItems[0].SubItems[1].Text = tbName.Text;
                    lv1.SelectedItems[0].SubItems[2].Text = cbGender.Text;
                    lv1.SelectedItems[0].SubItems[3].Text = TbTel.Text;
                    lv1.SelectedItems[0].SubItems[4].Text = tbDepartment.Text;
                    lv1.SelectedItems[0].SubItems[5].Text = DTPJOinTime.Value.ToString("yyyy年MM月dd日");
                    tbName.Clear();
                    cbGender.Text = "";
                    TbTel.Clear();
                    tbDepartment.Clear();
                    DTPJOinTime.Value = DTPJOinTime.MaxDate;
                    tbName.Focus();
    
    
    
                }
            }
    
            private void btndel_Click(object sender, EventArgs e)
            {
                //删除所选定的项目
                lv1.SelectedItems[0].Remove();
            }
    
            private void btnClear_Click(object sender, EventArgs e)
            {
                //清除ListView中所有内容
                lv1.Items.Clear();
            }
            //声明图片存放的路径,并声明一个随机变量,以便随机显示图片
            string[] path = System.IO.Directory.GetFiles(@"E:\C#\project\Windows窗体高级控件\任务实施\banner");
            Random r = new Random();
            private void timer1_Tick(object sender, EventArgs e)
            {
                int num = 0;
                if (tbName.Text.Trim() != "") num++;
                if (cbGender.Text != "") num++;
                if (TbTel.Text.Trim() != "") num++;
                if (tbDepartment.Text.Trim() != "") num++;
                if (DTPJOinTime.Value != DTPJOinTime.MaxDate) num++;
                progressBar1.Value = num;
                //随机显示图片
                pictureBox1.Image = Image.FromFile(path[r.Next(0,path.Length)]);
            }
    
            private void btnCheck_Click(object sender, EventArgs e)
            {
                lv1.ForeColor = Color.Black;
                //在ListView中查询文本
                ListViewItem checkItem = lv1.FindItemWithText(tbCheck.Text);
                //判定是否查询到
                if (checkItem != null)
                {
                    this.lv1.TopItem = checkItem;
                    checkItem.ForeColor = Color.Red;
                }
                else
                {
                    MessageBox.Show(tbCheck.Text+"不存在");
                }
            }
    
        }
    }
    
    
    展开全文
  • Win消息查看器(Win系统窗口控件消息查询)(编程辅助)v1.0.zip
  • HWND hWnd = FindWindow(L"SandMap (64-bit, PCD3D_SM5))", NULL);//获取窗口句柄 SetWindowLong(hWnd, GWL_STYLE, WS_VISIBLE);//隐藏边框 MoveWindow(hWnd, PosX, PosY, 800, 800, true);//设置位置及分辨率
  • API之控件与消息函数 AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小 AnyPopup 判断屏幕上是否存在任何弹出式窗口 ArrangeIconicWindows 排列一个父窗口的最小化子窗口 ...
  • windows应用程序【五】窗口控件

    千次阅读 2018-12-28 13:52:52
    首先还是将窗口的框架直接复制过来  #include &lt;windows.h&gt; LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, ...
  • Windows窗口程序设计中,按钮、文本编辑框等控件都作为一个子窗口在WM_CREATE事件中创建的。其中按钮类button有多种类型和风格,常见的单选钮、复选钮、分组框也在此类中,见下表: 子窗口控件:按钮类button ...
  • Windows编程之基本窗口控件小结

    千次阅读 2014-04-22 09:41:41
     子窗口控件类似windows的窗口,不过可以利用windows中已经有的,来直接CreateWindow,CreateWindow中的函数参数如下所示: Class name(类别名称) Window text(窗口文字) Window style(窗口样式) x position...
  • 和大家一起聊聊如何使用python做Windows一、环境安装​ 使用python实现来做PC端pip install pywinauto二、使用说明安装好了之后,关于使用说明大家可以参照官方文档上的说明内容翻译如下:就是说在我们安装好...
  • window窗体和控件分类

    2021-08-09 09:53:51
    Window、UserControl(用户控件,布局的时候像窗体那样布局就可以了)、Page把窗体以网页形式展现。而一个XAML页面里只能有一个顶级元素。而顶级元素里面只能有一个子元素。因此要有布局控件。 一.Window窗体属性 1...
  • windows标准控件的介绍与使用

    千次阅读 2021-02-25 16:51:07
    Windows系统提供的标准控件主要包括静态控件、按钮控件、编辑框控件、列表框控件、组合框控件等,如表所示。 Windows标准控件的类型 类别 MFC类 控件类型 静态控件 CStatic Static Text、Group Box 按钮控件 ...
  • Delphi让窗体控件随窗口大小而变化,你可以拖动改变窗口的大小,但窗口里面的按钮会随着窗体的变大而自动增大,代码中有一个处理窗体大小变化时的事件,来控制这些窗口控件的自适应变化功能。 运行环境:Windows/...
  • windows窗口控件的样式

    千次阅读 2019-07-05 15:03:34
    将组合框编辑控件中输入的文本从Windows字符集转换为OEM字符集,然后再转换回Windows字符集。当应用程序调用CharToOem函数将组合框中的Windows字符串转换为OEM字符时,这可确保正确的字符转换 。此样式对于包含...
  • 自己写的获取当前系统所有窗口信息的代码,delphi的,用的getwindowlong getwindowtext等
  • 网页嵌入windows form窗口控件

    热门讨论 2008-07-18 12:52:57
    windows form下编写的程序转换成.net控件的形式.嵌入到web页面中,既可以避免重复编码,又能够弥补普通web客户端无法满足复杂需求的弊端。例子比较简单,但把实现原理基本说清楚了,接下来要做的事情无非是将控件...
  • 窗口透明而控件不透明的实现

    热门讨论 2012-04-14 10:56:46
    工程采用的VS2008开发实现了窗口透明而控件不透明。具体的代码中间包含了很多我在尝试的时候注释的代码。另外就是SetLayeredWindowAttributes这个函数在VC6.0中间使用需要链接其它的库,具体方法请参照网上说明。...
  • Windows编程中的子窗口控件设计

    千次阅读 2016-05-16 20:27:50
    (注:本文转载自... 取父窗口窗口句柄: hwndParent = GetParent (hwnd) ; 发送消息: SendMessage (hwndParent, message, wParam, lParam) ; 预定义的控件有: 按钮、复选框、编辑
  • Windows button控件(按钮控件

    千次阅读 2021-05-19 20:19:05
    按钮既是标准控件,也是子窗口窗口类名是button。Button 控件样式以BS开头,常用的有:样式说明BS_LEFT文本居左。BS_RIGHT文本居右。BS_CENTER文本水平居中(默认为 BS_CENTER)。BS_BOTTOM文本位于按钮底部。BS_TOP...
  • VC利用mstscax控件做的远程桌面窗口默,把windows的远程桌面程序做到软件窗口内。
  • 怎样实现 单击读取按钮btn 控件dgv 显示 文本文件.csv数据 ![图片说明](https://img-ask.csdn.net/upload/201507/14/1436851604_43163.png);![图片说明]...
  • 第九章 子窗口控件
  • 一个多风格样式的VB窗口按钮控件,来源于国外,并且这个控件是开源的,测试程序包括了6种不同风格的按钮,使用者可根据演示效果一一对应代码,控件windows XP/Windows7、8下测试通过。运行时,单击主窗口的按钮,...
  • python操作windows窗口获取窗口句柄

    万次阅读 多人点赞 2019-11-06 09:16:54
    Windows下获取窗口句柄时操作系统版本和软件版本对获取有影响,就会出现在本地调试正常的程序,交付使用的时候报错。 查看windows所有可显示的窗口句柄及窗口名称。 # -*- coding: utf-8 -*- """ File Name ...
  • Windows窗体与控件

    万次阅读 2016-05-11 11:20:39
    学习下Window的窗体与控件,UI,我的IDE是VS2012,通过学习这些基本...Windows窗体窗体是应用程序的基本单元,是非常重要的。它实质上是一块白板,通过添加控件可以创建用户界面,并通过代码来操作数据,填充这个白板。
  • 7.5.4 滑块控件的使用 具体内容请参照本书 7.5.5 进度条控件的创建及使用 进度条Progress Bar的用途是向用户显示程序的...第7章 使用Windows标准控件Windows窗口应用程序中特别是对话框中经常见到按钮编辑框列表框等
  • java获取其他应用程序的窗口控件

    千次阅读 2019-06-02 11:16:38
    ... 比如现在有一个桌面应用。我现在要抓取这个桌面应用输入框或者其他控件的内容 ...我的毕业设计中需要在Windows平台上面跨进程操作窗口。实际上是获取浏览器上面的网页中的文本框元素,还有windows32窗体上面的编...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 108,002
精华内容 43,200
关键字:

windows窗口控件