整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

51.C# Button控件

51.C# Button控件


button控件是由system.windows.forms.button类提供的控件,又称为按钮控件。

正文


Button控件,又称为按钮控件,它表允许用户通过单击来执行操作。Button控件既可以显示文本,也可以显示图像,当该控件被单击时,它看起来像是被按下,然后被释放。Button控件最常用的是Text属性,其中,Text属性用来设Button:控件显示的文本,Click事件用来指定单击Button控件时执行的操作。

属性


Anchor

获取或设置控件绑定到的容器的边缘并确定控件如何随其父级一起调整大小。<br><br>(继承自 Control)

AutoEllipsis

获取或设置一个值,该值指示是否要在控件的右边缘显示省略号 (...) 以表示控件文本超出指定的控件长度。<br><br>(继承自 ButtonBase)

BackColor

获取或设置控件的背景色。<br><br>(继承自 ButtonBase)

Cursor

获取或设置当鼠标指针位于控件上时显示的光标。<br><br>(继承自 Control)

DialogResult

获取或设置一个值,该值在单击按钮时返回到父窗体。

Dock

获取或设置哪些控件边框停靠到其父控件并确定控件如何随其父级一起调整大小。<br><br>(继承自 Control)

Enabled

获取或设置一个值,该值指示控件是否可以对用户交互作出响应。<br><br>(继承自 Control)

FlatAppearance

获取用于指示选中状态和鼠标状态的边框外观和颜色。<br><br>(继承自 ButtonBase)

FlatStyle

获取或设置按钮控件的平面样式外观。<br><br>(继承自 ButtonBase)

Focused

获取一个值,该值指示控件是否有输入焦点。<br><br>(继承自 Control)

Font

获取或设置控件显示的文字的字体。<br><br>(继承自 Control)

ForeColor

获取或设置控件的前景色。<br><br>(继承自 Control)

Image

获取或设置显示在按钮控件上的图像。<br><br>(继承自 ButtonBase)

ImageAlign

获取或设置按钮控件上的图像对齐方式。<br><br>(继承自 ButtonBase)

ImageIndex

获取或设置按钮控件上显示的图像的图像列表索引值。<br><br>(继承自 ButtonBase)

ImageKey

获取或设置 ImageList 中的图像的键访问器。<br><br>(继承自 ButtonBase)

ImageList

获取或设置包含按钮控件上显示的 ImageList 的 Image。<br><br>(继承自 ButtonBase)

Name

获取或设置控件的名称。<br><br>(继承自 Control)

Size

获取或设置控件的高度和宽度。<br><br>(继承自 Control)

TabIndex

获取或设置控件在其容器内的 Tab 键顺序。<br><br>(继承自 Control)

TabStop

获取或设置一个值,该值指示用户能否使用 Tab 键将焦点放到该控件上。<br><br>(继承自 Control)

Tag

获取或设置包含有关控件的数据的对象。<br><br>(继承自 Control)

Text

获取或设置与此控件关联的文本。<br><br>(继承自 ButtonBase)

TextAlign

获取或设置按钮控件上的文本对齐方式。<br><br>(继承自 ButtonBase)

Top

获取或设置控件上边缘与其容器的工作区上边缘之间的距离(以像素为单位)。<br><br>(继承自 Control)

TopLevelControl

获取没有另一个 Windows 窗体控件作为其父级的父控件。 通常,这是控件所在的最外面的 Form。<br><br>(继承自 Control)

Visible

获取或设置一个值,该值指示是否显示该控件及其所有子控件。<br><br>(继承自 Control)

Width

获取或设置控件的宽度。<br><br>(继承自 Control)

BackgroundImage

获取或设置在控件中显示的背景图像。<br><br>(继承自 Control)

BackgroundImageLayout

获取或设置在 ImageLayout 枚举中定义的背景图像布局。<br><br>(继承自 Control)

事件


Click

在单击控件时发生。<br><br>(继承自 Control)

DoubleClick

当用户双击 Button 控件时发生。

Enter

进入控件时发生。<br><br>(继承自 Control)

MouseClick

用鼠标单击控件时发生。<br><br>(继承自 Control)

MouseDoubleClick

当用户使用鼠标双击 Button 控件时发生。

MouseDown

当鼠标指针位于控件上并按下鼠标键时发生。<br><br>(继承自 Control)

MouseEnter

在鼠标指针进入控件时发生。<br><br>(继承自 Control)

MouseHover

在鼠标指针停放在控件上时发生。<br><br>(继承自 Control)

MouseLeave

在鼠标指针离开控件时发生。<br><br>(继承自 Control)

MouseMove

在鼠标指针移到控件上时发生。<br><br>(继承自 Control)

MouseUp

在鼠标指针在控件上并释放鼠标键时发生。<br><br>(继承自 Control)

MouseWheel

在控件有焦点且鼠标轮移动时发生。<br><br>(继承自 Control)

Move

在移动控件时发生。<br><br>(继承自 Control)

对话框布局

设置Anchor 为 Bottom,Right

我们给按钮设置一条线的样式

图片背景BackgroundImage,添加图片,

设置背景填充样式BackgroundImageLayout,这里我选 None



Center

2

图像在控件的矩形工作区中居中显示。

None

0

图像沿控件的矩形工作区顶部左对齐。

Stretch

3

图像沿控件的矩形工作区拉伸。

Tile

1

图像沿控件的矩形工作区平铺。

Zoom

4

图像在控件的矩形工作区中放大。

给按钮添加一个图标

添加一个click事件

话框在Qt GUI应用程序中有着广泛的用途,对话框有模态、非模态两种情况。

对于参数选择的对话框,一般用模态对话框;对于显示或查看某些内容的对话框,一般用非模态对话框。

对话框类QDialog,官方文档:http://qt-project.org/doc/qt-4.8/qdialog.html

1. 模态对话框

模态对话框通过调用exec()函数实现,使用模态对话框时,事件就在对话框内部循环,必须将对话框关闭才能继续执行主界面的操作。

需要注意的是,关闭模态对话框时,exec()将返回一个值。

原型:int QDialog::exec () [slot]

返回值利用:比如对话框中有Ok和Cancel两个按钮,点击Ok按钮时,关闭对话框同时主程序接受对话框中设置的参数,点击Cancel或右上角的X后,关闭对话框并且立即返回不再执行下面的程序。这种情况下,将Ok按钮的clicked()信号与accept()槽连接,Cancel按钮的clicked信号与reject()槽连接。这时,当点击Ok按钮时,将触发accept()槽,exec()返回QDialog::Recepted,当点击Cancel按钮时,将触发reject槽,exec()返回QDialog::Rejected。

connect(ui.Ok,SIGNAL(clicked()),this,SLOT(accept()));
connect(ui.Cancel,SIGNAL(clicked()),this,SLOT(reject()));

执行时,进行一下判断,点击了Cancel返回,点击了Ok传递对话框中的参数继续执行

	//在某个函数中调用对话框
 // a为对话框类对象
 if(a.exec()==QDialog::Rejected)
 {
     //操作
     return;
 }
 //传递对话框中的参数
 //继续操作

不知道说明白了没有,不明白的话自己下代码实现一下。

2. 非模态对话框

非模态对话框调用show()函数实现,当然在主程序中,调用非模态对话框时,如果只写个show(),可能是对话框一闪而过,为了解决这个情况,需要全局对象的事件响应槽processEvents(),定时的访问该对话框,这样就可以处理主界面的事件同时对话框也不会消失。

本人采用方法时利用QTimer类的singleShot()方法。QTimer类提供了对时钟的操作。

QTimer类的官方文档:http://qt-project.org/doc/qt-4.8/qtimer.html

singleShot的原型:void QTimer::singleShot ( int msec, QObject * receiver, const char * member ) [static]

第一个参数为执行的时间间隔,单位为ms

第二个参数为接受的对象

第三个参数为触发的槽

恰好,我们可以每隔msec时间触发processEvents(),从而使对话框不消失,第二个参数为对话框对象。需要注意的是,对话框的对象要定义在堆上(即要定义成指针对象),因为如果定义在栈上,执行完后函数后对象会被自动清理掉,找不到第二个参数所需的对象,就没法显示出对话框了。

#include <QTimer>

CModallessDialog  *dialog;  //最好定义成全局变量

dialog=new CModallessDialog;
dialog->show();
dialog->setTitle(tr("非模态对话框")); //设置窗口标题
//对话框中的一些处理
QTimer::singleShot(200,dialog,SLOT(qApp->processEvents()));  //时间间隔200ms

在使用时,将dialog对象delete掉之后对话框就会消失

//如果对话框显示,就将其删除
if(NULL!=dialog)
{
    delete dialog
    dialog=NULL;
}

在显示对话框时,也要注意如果dialog!=NULLs时,现将其delete掉赋NULL再分配地址。

了,这一节咱们来实现预览功能的第一步:给工程多加一个窗体,并且在按“预览”按钮时,将它显示出来。

新建窗口

0、在项目窗体里单击鼠标右键,然后选择Add New...,然后在弹出的窗口里选择“QT->QT设计师界面类”,并点击Choose...

Add New...

1、然后的步骤里选择Dialog without Buttons,点击下一步

Dialog without Buttons


2、设置好我们的类名,在这里我写的PreViewVideoWindow,记住,只需要改类名,其它的地方会自动变,不需要改。

PreViewVideoWindow

3、接下来的这一步不需要改,直接点“完成”就行了。

这时,我们的工程里就多出一个新的空白窗体来了,而且项目窗口里也会自动创建出窗体的类来。

新窗体类

此时,我们的新窗体就创建完成了。

要注意的地方是:这个窗体此时在工程运行时并不存在,如果要把它显示出来,我们需要用工用代码去创建它显示它并控制它。在工程里只有主窗体是自动创建并显示出来的,其它窗体都需要我们手动去操作。

点击按钮显示新窗体

现在我们回到mainwindow.h中,在头部写入

#include "previewvideowindow.h" //注意,要用引号,不要用<>。

然后在mainwindow中定义一个变量,用来存储这个新窗体

PreViewVideoWindow *preWindow;

然后在“预览”按钮的槽函数中写入如下代码:

void MainWindow::on_btn_PreView_clicked()
{
    //创建窗体实例
    preWindow=new PreViewVideoWindow(this);  //注意要有this,就不用自己删除了

    //设置窗体关闭时自动删除类实例
    //如果不设置这个,关闭窗体时只是隐藏了它,并没有销毁
    preWindow->setAttribute(Qt::WA_DeleteOnClose, true);

    //显示出窗体
    preWindow->show();
}

我这代码是点击时就会新建窗体,并设置好在窗体关闭时自动删除它的实例。这个按钮每次点击都会出现一个新窗口,如果您想实现只出现一个窗口的情况,就需要自己去设置检查并维护一个变量来判断了,因为我不需要,所以我这里就没有做。

新窗体显示成功

看,新窗体显示出来了,但是,它右上角怎么有个问号按钮呢?下面我们把它去掉,在previewvideowindow.cpp中构造函数里写入如下代码:

PreViewVideoWindow::PreViewVideoWindow(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::PreViewVideoWindow)
{
    ui->setupUi(this);
  
  //就是这句,这个是用来设置窗体样式的,现在让它只显示一个关闭按钮。
    this->setWindowFlags(Qt::Dialog|Qt::WindowCloseButtonHint);
}

成功去掉问号按钮

下一节让这个新窗体能显示视频,期待。