笔记13 winform

一:panel 和 tablelayoutpanel,FlowLayoutPanel

FlowLayoutPanel和TableLayoutPanel是.NET Framework的新增控件。顾名思义,面板可以采用Web窗体的方式给Windows窗体布局。FlowLayoutPanel是一个容器,允许以垂直或水平的方式放置包含的控件。除了放置控件之外,还可以剪辑控件。放置的方向使用FlowDirection属性和FlowDirection枚举来设置。WrapContents属性确定在重新设置窗体的大小时,控件是放在下一行、下一列,还是剪辑控件。

TableLayoutPanel使用栅格结构控制控件的布局。所有的Windows窗体控件都是TableLayoutPanel的子控件,包括另一个TableLayoutPanel。所以窗口的布局可以非常灵活,并可以动态设置。把一个控件添加到TableLayoutPanel上时,会给属性页面的Layout类别添加4个属性Column、ColumnSpan、Row和RowSpan。与Web页面上的html表一样,可以给每个控件设置列和行间距。控件默认放置在表的单元格中心,但这可以使用Anchor和Dock属性改变。

二:操作鼠标对象Cursor

改变鼠标指针形状:
  Cursor.Current = Cursors.WaitCursor;
  try
  {
    .. do some work ..
  }
  finally
  {
    Cursor.Current = Cursors.Default;
  }

三:OracleDataAdapter

DataReader工作时必须要维护数据库的连接,而且只能向前的方式读取数据,可以浏览记录或跳到某一记录上。而且只能读取记录。而用DataAdapter对象填充了DataSet,DataAdapter对象需要处理连接的打开和关闭。DataSet为数据的读写以及操作不同数据源中的数据提供了极大的灵活性。

表示用于填充 DataSet 和更新数据库的一组数据命令和到数据库的连接。无法继承此类。

OracleDataAdapter 作为 DataSet 和数据库之间的桥梁,用于检索和保存数据。OracleDataAdapter 这个桥梁通过这样的方法提供:使用 Fill 将数据从数据库加载到 DataSet 中,使用 Update 将在 DataSet 中所作的更改发送回数据源。

当 OracleDataAdapter 填充 DataSet 时,它为返回的数据创建必需的表和列(如果它们尚不存在)。但是,除非MissingSchemaAction 属性设置为 AddWithKey,否则这个隐式创建的架构中不包括主键信息。也可以使用FillSchema,让 OracleDataAdapter 创建 DataSet 的架构,并在用数据填充它之前就将主键信息包括进去。有关更多信息,请参见 向 DataSet 添加现有约束

默认情况下,通过 Fill 导入 DataTable 的数字字段映射为 OracleNumber 对象。如果导入的非整数值过大或者精度高于 OracleNumber 的精度限制,则可能溢出 OracleNumber,并引发 Oracle 异常。有关更多信息,请参考OracleNumber 的说明。

四:c# using用法

using 关键字有两个主要用途:
  (一).作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型。
  (二).作为语句,用于定义一个范围,在此范围的末尾将释放对象。

using指令
    ①允许在命名空间中使用类型,这样,您就不必在该命名空间中限定某个类型的使用:
             using System.Text;
             using PC.Company;
    ②为命名空间或类型创建别名。
               using MyCompany = PC.Company;       //命名空间的别名。
               using Project = PC.Company.Project; //类型的别名
    using引入命名空间,并不等于编译器编译时加载该命名空间所在的程序集,程序集的加载决定于程序中对该程序集是否存在调用操作,如果代码中不存在任何调用操作则编译器将不会加载using引入命名空间所在程序集。因此,在源文件开头,引入多个命名空间,并非加载多个程序集,不会造成“过度引用”的弊端。
    创建别名的另一个重要的原因在于同一文件中引入的不同命名空间中包括了相同名称的类型,如SharpMap.Geometries.Point与System.Drawing.Point。为了避免出现名称冲突,可以通过设定别名来解决:
    using SGPoint = SharpMap.Geometries.Point;
    using SDPoint = System.Drawing.Point;
    尽管我们可以通过类型全名称来加以区分,但是这显然不是最佳的解决方案。用using指令创建别名,有效的解决了这种可能的命名冲突,才是最佳的解决方案。

using语句
    using 语句允许程序员指定使用资源的对象应当何时释放资源。using 语句中使用的对象必须实现 IDisposable 接口。此接口提供了 Dispose 方法,该方法将释放此对象的资源。
    ①可以在 using 语句之中声明对象。
      Font font2 = new Font("Arial", 10.0f);
      using (font2)
      {
          // use font2
      }
    ②可以在 using 语句之前声明对象。
      using (Font font2 = new Font("Arial", 10.0f))
      {
          // use font2
      }
    ③可以有多个对象与 using 语句一起使用,但是必须在 using 语句内部声明这些对象。
        using (Font font3=new Font("Arial",10.0f), font4=new Font("Arial",10.0f))
      {
          // Use font3 and font4.
      }

使用规则
    ①using只能用于实现了IDisposable接口的类型,禁止为不支持IDisposable接口的类型使用using语句,否则会出现编译错误;
  ②using语句适用于清理单个非托管资源的情况,而多个非托管对象的清理最好以try-finnaly来实现,因为嵌套的using语句可能存在隐藏的Bug。内层using块引发异常时,将不能释放外层using块的对象资源;
  ③using语句支持初始化多个变量,但前提是这些变量的类型必须相同,例如:
        using(Pen p1 = new Pen(Brushes.Black), p2 = new Pen(Brushes.Blue))
      {
          //
      }
    ④针对初始化对个不同类型的变量时,可以都声明为IDisposable类型,例如:
        using (IDisposable font = new Font("Verdana", 12), pen = new Pen(Brushes.Black))
      {
          float size = (font as Font).Size;
          Brush brush = (pen as Pen).Brush;
      }

using实质
    在程序编译阶段,编译器会自动将using语句生成为try-finally语句,并在finally块中调用对象的Dispose方法,来清理资源。所以,using语句等效于try-finally语句,例如:
    Font f2 = new Font("Arial", 10, FontStyle.Bold);
  try
  {
      //执行文本绘制操作
  }
  finally
  {
      if (f2 != null) ((IDisposable)f2).Dispose();
  }

五:region

#region 块必须以 #endregion 指令终止。

#region 块不能与 #if 块重叠。但是,可以将 #region 块嵌套在 #if 块内,或将 #if 块嵌套在 #region 块内。

#region 使您可以在使用 Visual Studio 代码编辑器的大纲显示功能时指定可展开或折叠的代码块。

#region 是 ctrl   +   k,s
主方法一般不都是自动生成的嘛
posted @ 2015-10-10 14:16  sunshinelym  阅读(168)  评论(0编辑  收藏  举报