第九章 基本的windows forms应用程序
[STAThreadAttribute]single-threaded apartment。
apartment state COM中的概念,.net不用apartement线程,但为了safe,apartment state被设为single-threaded apartment,以防一个COM对象被包装后应用于程序中。
把windows消息转换为.net事件。
代码或IDE的属性窗口中的改变都会立刻反映到对方。
注意:在InitializeComponent()中的改变要小心,会使IDE不能正常工作。
小技巧:不同于缺省值的属性,IDE中被显示为加粗
.net设计好了许多委托和事件源类,程序员设计事件接受类。
IDE中可以对不同的事件使用相同的事件处理器:直接在属性菜单中选择//前提是委托的签名相同
TextBoxBase抽象类可以用来自定义字处理程序。.net提供的三个控件TextBox, MaskedTextBox, RichTextBox。
word wrap自动换行
/*这章程序的模式:在.h文件中写代码,.cpp不变。用//分隔不同的控件属性改变。private事件处理器,不同控件或组件的事件处理代码都在同一个Form类中,和MFC不一样,MFC在相应的控件类的代码文件中编写消息处理,这样会不会很乱呢??疑问中*/
//winform编程也没有源代码。不向MFC
第十章 高级windows forms应用程序
ToolStrip, StatusStrip, MenuStrip.
ErrorProvider
NotifyIcon
第十一章 用GDI+作图
所有的GDI+功能都在System.Drawing.dll中。
Paint事件处理器和OnPaint虚函数。事件处理器在IDE中双击即可,事件的实现消耗要大一些;虚函数速度快一些。
Graphics没有构造函数,获得Graphics实例的几种方法。
DoubleBuffer
第十二章 ADO.net和数据库开发
连接:SqlConnection
查询:SqlCommand, OleDbCommand, OdbcCommand,OracleCommand
CommandType:TEXT,Procedure
Procedure(Parameters->Add;cmd->Parameters["@LastName"]->Value = Name;)
CommandText
SqlDataReader
ExecuteReader
while(reader->Read())
{
Console::WriteLine(reader["StoryID"]);//这里就是属性index呀?确实简洁。不过也可以用Getxxx()
}
修改数据库内容:
ExecuteNonQuery()
ExecuteScalar()//返回一个对象,通常是数据库中的计数或者是求和。
事务处理:
try{
SqlTransaction:connection->BeginTransaction;transaction->Commit();
}
catch (Exception ^e)
{
transaction->Rollback("AuthorTransaction");
}
disconnected ADO.NET
被下载到本地内存的数据库。
XML格式传输,可以自由的通过防火墙;避免了以前的system-level COM marshalling requests的问题。//疑问?
ADO.NET的核心类:
手工建立数据库程序的步骤:
1. Create a SqlConnection.
2. Create a SqlDataAdaptor.
3. Implement a SelectCommand property.
4. Implement an InsertCommand property (optional).
5. Implement an UpdateCommand property (optional).
6. Implement a DeleteCommand property (optional).
7. Create a DataSet.
8. Populate (fill) the DataSet.
用IDE开发数据库程序步骤:
NewItem-DataSet
DataGridView