窗体

Invoke and BeginInvoke

两盒软妹~` 提交于 2020-03-24 11:48:46
在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate。 一、为什么Control类提供了Invoke和BeginInvoke机制? 关于这个问题的最主要的原因已经是dotnet程序员众所周知的,我在此费点笔墨再次记录到自己的日志,以便日后提醒一下自己。 1、windows程序消息机制 Windows GUI程序是基于消息机制的,有个主线程维护着一个消息泵。这个消息泵让windows程序生生不息。 Windows GUI程序的消息循环 Windows程序有个消息队列,窗体上的所有消息是这个队列里面消息的最主要来源。这里的while循环使用了GetMessage()这个方法,这是个阻塞方法,也就是队列为空时方法就会被阻塞,从而这个while循环停止运动,这避免了一个程序把cpu无缘无故地耗尽,让其它程序难以得到响应。当然在某些需要cpu最大限度运动的程序里面就可以使用另外的方法,例如某些3d游戏或者及时战略游戏中,一般会使用PeekMessage()这个方法,它不会被windows阻塞,从而保证整个游戏的流畅和比较高的帧速。 这个主线程维护着整个窗体以及上面的子控件。当它得到一个消息,就会调用DispatchMessage方法派遣消息,这会引起对窗体上的窗口过程的调用。窗口过程里面当然是程序员提供的窗体数据更新代码和其它代码。 2

面试题目11

半世苍凉 提交于 2020-03-24 07:23:10
给你一份做作! 一、选择填空题(每空2分,共60分) 1.在对SQL Server 数据库操作时应选用()。 a)SQL Server .NET Framework 数据提供程序; b)OLE DB .NET Framework 数据提供程序; c)ODBC .NET Framework 数据提供程序; d)Oracle .NET Framework数据提供程序; 2.下列选项中,()是引用类型。 a)enum类型 b)struct类型 c)string类型 d)int类型 3.关于ASP.NET中的代码隐藏文件的描述正确的是() a)Web窗体页的程序的逻辑由代码组成,这些代码的创建用于与窗体交互。编程逻辑唯一与用户界面不同的文件中。该文件称作为“代码隐藏”文件,如果用C#创建,该文件将具有“.ascx.cs”扩展名。 b)项目中所有Web窗体页的代码隐藏文件都被编译成.EXE文件。 c)项目中所有的Web窗体页的代码隐藏文件都被编译成项目动态链接库(.dll)文件。 d)以上都不正确。 4.以下描述错误的是() a)在C++中支持抽象类而在C#中不支持抽象类。 b)C++中可在头文件中声明类的成员而在CPP文件中定义类的成员,在C#中没有头文件并且在同一处声明和定义类的成员。 c)在C#中可使用 new 修饰符显式隐藏从基类继承的成员。 d)在C

C#多线程与UI响应 跨线程更新UI

醉酒当歌 提交于 2020-03-22 14:58:18
最近在写一个TCP通信程序,自定义了一个通信类TCPclient,用于客户端异步接收和发送网络消息。 TCPclient中定义了一个接收到新的网络消息事件: 1 //收到新消息事件 2 public delegate void receiveNewNetworkMsgHandler( string networkMSG); 3 public event receiveNewNetworkMsgHandler receiveNewNetworkMsg; 在外部的窗体中订阅了此事件: void thisClient_receiveNewNetworkMsg( string networkMSG); 起初是直接在这个函数中读取网络消息 ,并解析命令,然后触发窗体的LoginSuccess事件,LoginSuccess事件的委托函数会New一个 main 窗体 但是问题是这个new的main窗体总是无响应。 经过很长时间的摸索,终于得出以下结论 在自定义类中定义并触发事件,那么UI中的事件处理代码也就工作在自定义类线程中,访问UI中控件需要invoke 在此之前,我一直认为事件处理函数在哪个类,自然运行的时候就在相应的线程中执行,至此才明白错在哪里。 根据这条结论,自然就不能直接在thisClient

C#笔试题面试题锦集(1)

瘦欲@ 提交于 2020-03-21 10:20:26
1 (1) 面向对象的语言具有 __ 继承性 _ 性、 _ 封装性 _ 性、 _ 多态性 性。 (2) 能用 foreach 遍历访问的对象需要实现 _ IEnumerable 接口或声明 _ GetEnumerator 方法的类型。 1.c# 中的三元运算符是 __?:__ 2. 当整数 a 赋值给一个 object 对象时,整数 a 将会被 __ 装箱 ___? 3. 类成员有 __3__ 种可访问形式? 4.public static const int A=1; 这段代码有错误么?是什么? const 成员都是 static 所以应该去掉 static 5.float f=-123.567F; int i=(int)f; i 的值现在是 _-123____? 6. 利用 operator 声明且仅声明了 == ,有什么错误么 ? 要同时修改 Equale 和 GetHash() ? 重载了 "==" 就必须重载 "!=" 7. 委托声明的关键字是 ___ delegate ___? 8. 用 sealed 修饰的类有什么特点?不可被继承 9. 在 Asp.net 中所有的自定义用户控件都必须继承自 _ System.Web.UI.UserControl _______? 10. 在 .Net 中所有可序列化的类都被标记为 __[serializable]___? 11. 在

解决Delphi图形化界面的TEdit、TLable等组件手动拖拽固定大小,但是编译之后显示有差别的情况

为君一笑 提交于 2020-03-20 03:17:29
经常遇到这样的情况,在我们使用Delphi的可视化工具进行UI设计的时候,我们拖拽TEdit或者Label组件,并且在可视化界面上设置它们的长、宽   但是当我们编译和运行程序的时候,却发现真正显示出来的 TEdit或者TLabel组件并不是我们在可视化界面所拖拽的长和宽(显示的“有问题”)   具体的情况见下面的两张图   1.我们在Delphi的可视化界面上需要一个TEdit和TLabel组件,于是我们拖拽了两个组件放在上面,并且设置拖拽设置了长和宽(为了显示清楚,我设置了颜色)   这个时候通过拖拽设计界面上的组件确实   2.但是按 F9 运行的时候显示的却是这样的效果   明显图中显示的 TEdit、TLabel组件(两个黄色区域)根本就不是设置的时候的样子 2015.08.07发现了本质原因            上面出现的这个问题,我在2015.05.11专门写了博客说明解决方法(见本博客的下部分),那个方法确实可以解决问题,但是没有弄明白真正的原因,所以现在进行说明。   在可视化界面上通过拖拽设计TEdit或者TLabel的大小的时候,拖拽好了一个长和宽,但是在点击编译运行之后,发现出来的效果是不一样的(入上面的两张图)。   主要的问题就是出在TEdit的AutoSize属性(TLabel也有AutoSize属性),因为通过看该TEdit的Object

Java(40)_GridBagLayout

二次信任 提交于 2020-03-18 01:49:37
package MYSQK.example01; import java.awt.*; /** * 网络包布局管理器 */ class Layout extends Frame{ public Layout(String title){ GridBagLayout layout = new GridBagLayout(); GridBagConstraints constraints = new GridBagConstraints();//约束对象,这个都要加的!!! this.setLayout(layout);//设置布局管理器 //设置横向和纵向 constraints.fill = GridBagConstraints.BOTH;//设置组件横向纵向可以拉伸 constraints.weightx=1;//设置横向权重为1,表示横向拉伸时,它也要随着窗体变大 constraints.weighty=1;//设置纵向权重为1,表示纵向拉伸时,他也要随着窗体变大 this.addComponent("button1",layout,constraints); this.addComponent("button2",layout,constraints); this.addComponent("button3",layout,constraints); constraints

学习QT之不规则窗体

人走茶凉 提交于 2020-03-17 02:28:01
常见的窗体通常是各种方形的对话框,但有时也需要使用非方形的窗体,如原型、椭圆形、甚至于是不规则形状的对话框。 利用 setMask() 函数为窗体设置遮罩,实现不规则窗体。设置遮罩后的窗体尺寸仍然是原窗体大小,只是被遮罩的地方不可见。 下面通过一个实例来介绍它的使用 : 一、运行结果 二、具体代码 shapewidget.h #ifndef SHAPEWIDGET_H #define SHAPEWIDGET_H #include <QWidget> class ShapeWidget : public QWidget { Q_OBJECT public: ShapeWidget(QWidget *parent = 0); ~ShapeWidget(); protected: void mousePressEvent(QMouseEvent *); void mouseMoveEvent(QMouseEvent *); void paintEvent(QPaintEvent *); private: QPoint dragPosition; }; #endif // SHAPEWIDGET_H shapewidget.cpp #include "shapewidget.h" #include <QMouseEvent> #include <QPainter> #include

Java的UI设计——Swing组件

我与影子孤独终老i 提交于 2020-03-16 12:40:27
Swing组件设计UI java中具有一套非常实用的组件——Swing,利用其中的少量组件就可以设计出基础的UI。 基础窗口的创建——窗体JFrame类 在窗口里传达信息——标签JLabel类 进行简单的动作——按钮JButton类 设计体面的布局——布局管理器 基础窗口的创建——窗体JFrame类 要设计UI,开始当然应该是窗体。在Java中,创建窗体有两种组件:JFrame与JDialog。JDialog类的本意是用于从一个窗口弹出另一个窗口(类似于弹出的信息窗),和JFrame的功能很相似,在一般的情况下使用JFrame类就可以了。 要创建JFrame类型的窗体,第一步就是构造一个继承JFrame类的类: 1 public class testJFrame extends Jframe{ 2 ... 3 } 构造窗体的方法就要在这个类里实现。是的,构造窗体需要利用方法,而不是简单地创建一个对象就可以的。要使得构造一个最基本的可视的窗体,方法应该至少具有如下内容: 1 public class testJFrame extends Jframe{ 2 public void createJFrameWindow(){ 3 JFrame jf = new JFrame(); //创建新JFrame对象 4 jf.setVisible(true); //使得该对象指向的窗体可见 5

父窗体的panel调用子窗体

纵饮孤独 提交于 2020-03-16 08:16:47
private static Form1 form1; private void toolStripButton1_Click(object sender, EventArgs e) { this.btnjkst.BackgroundImage = Image.FromFile(Application.StartupPath + @"\img\buttonanxia.jpg"); forma(); curform = "f1"; } private void forma() { if (form1 == null || form1.IsDisposed) { Form1 sAllPage = new Form1(); sAllPage.TopLevel = false; this.panel1.Controls.Clear(); this.panel1.Controls.Add(sAllPage); sAllPage.Show(); sAllPage.WindowState = FormWindowState.Maximized; sAllPage.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms

黑马day11 脏读数据&解

☆樱花仙子☆ 提交于 2020-03-16 04:16:37
数据库: create table account ( id int primary key auto_increment, name varchar(20), money double ); insert into account values(null,'a',100); insert into account values(null,'b',100); 1.演示脏读 开两个client的窗体,Aclient的级别是数据库默认的Repeatable read -- 可以防止脏读/不可反复读问题,可是不能防止虚读(幻读)问题。Bclient的级别更改为效率最高的Read uncommitted级别 不可以解决脏读的问题 A窗体: 开启事务:start transaction; a账户转账10元到b账户:update account set money=money-10 where name='a'; b账户添加10元:update account set money=money+10 where name='b'; 不提交事务; B窗体: 开启事务:start transaction; 查询数据库中的b账户数据:select * from account; A窗体: 回滚事务:rollback; B窗体: 查询数据:select * from account; 脏读数据产生。