C#知识点与控件的制作

  • 一、C#中多个类库中有同名类,区分问题
  • 二、制作最简单的winform控件
    • 1、拖动加载
  • 事件代理 筛选器
    • 2、显示属性、事件,及其修改
      • 常见控件属性介绍
      • 窗体常用的方法
      • 常见控件事件介绍
    • 文本框类控件
        • Label 控件
        • TextBox 控件常用方法
        • TextBox 控件常用事件
      • RichTextBox控件
        • RichTextBox控件常用属性
        • RichTextBox控件常用方法
      • NumericUpDown 控件
      • Button 控件
      • GroupBox 控件
      • RadioButton控件
        • RadioButton控件常用属性:
        • RadioButton控件常用事件:
      • CheckBox 控件
    • 列表类控件
      • ListBox 控件
      • PictureBox 控件的使用
        • PictureBox 控件常用属性:
      • Timer 控件
        • Timer 控件常用属性:
      • ProgressBar控件
      • ProgressBar控件的常用方法如下。
      • TrackBar控件
      • HScrollBar 控件和 VScrollBar控件的使用
      • OpenFileDialog 控件
        • OpenFileDialog控件的常用属性
        • OpenFileDialog控件的常用属性
      • SaveFileDialog 控件
      • FontDialog 控件
      • ColorDialog控件
      • PrintDialog控件和 PrintDocument 控件
    • 用户自定义对话框
    • 菜单控件
      • 多窗体程序设计
      • MDI 应用程序设计
      • 键盘事件处理
      • 鼠标事件处理
      • 控件与组件的区别
    • 3、建立控件之间的关联
    • 4、尝试自己制作控件
    • 5、将自己的控件在其他项目中引用(非拖动,代码写入)
      • 点类的应用
      • Size的应用:
    • 6、显示磁盘文件夹
    • 7、磁盘文件夹与显示图片的pictureBox建立联系
    • 8、设置图片显示时的“拉伸”
  • 三、遇到的报错与解决方式

一、C#中多个类库中有同名类,区分问题

如果有多个类库,其中有的类库,里面的类名重复了,可以通过此方法区别使用.

using Mybird_2;
using System;
using BirdClasslib;
namespace MyBird_2_try
{class Program{static void Main(string[] args){Console.WriteLine("Hello World!Please put in the first number.");Mybird_2.Hen a = new Mybird_2.Hen();//如果不用using Mybird,该如何调用其中函数a.Eat();// BirdClasslib.Hen.a1 = new BirdCLassLib.Hen();//如果有多个类库,其中有的类库,里面的类名重复了,可以通过此方法区别使用}}
}

二、制作最简单的winform控件

1、拖动加载

1)首先,我们只需要建立一个新项目,项目为windows窗体应用,然后我们就可以在工具箱,利用拖动的形式,进行加载控件。

事件代理 筛选器

https://blog.csdn.net/weixin_34355715/article/details/94227770?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161960868216780357253844%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161960868216780357253844&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-1-94227770.pc_search_result_hbase_insert&utm_term=C%23%E4%BA%8B%E4%BB%B6%E4%BB%A3%E7%90%86
https://blog.csdn.net/ljsql/article/details/88549943?ops_request_misc=&request_id=&biz_id=102&utm_term=C#%E4%BA%8B%E4%BB%B6%E4%BB%A3%E7%90%86&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-5-88549943.pc_search_result_hbase_insert
https://blog.csdn.net/lockepeak/article/details/2187011?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161960868216780357253844%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161960868216780357253844&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-5-2187011.pc_search_result_hbase_insert&utm_term=C%23%E4%BA%8B%E4%BB%B6%E4%BB%A3%E7%90%86

上课案例:

 public Form1()//构造函数,一构造,就执行初始化函数{InitializeComponent();}

这个是事件代理,具体代码在designer.cs中。

事件:
由某个对象发出的消息。比如用户按下了某个按钮,某个文件发生了改变,socket上有数据到达。触发事件的对象称作发送者(sender),捕获事件并且做出响应的对象称作接收者(receiver),一个事件可以存在多个接受者。

事件的实现依赖于“代理”(delegate)

代理(delegate)

delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类。与其它的类不同,delegate类能够拥有一个签名(signature),并且它只能持有与它的签名相匹配的方法的引用。它所实现的功能与C/C++中的函数指针十分相似。

它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m。

但与函数指针相比,delegate有许多函数指针不具备的优点

1)函数指针只能指向静态函数,而delegate既可以引用静态函数,又可以引用非静态成员函数。
2)在引用非静态成员函数时,delegate不但保存了对此函数入口指针的引用,而且还保存了调用此函数的类实例的引用。
3)与函数指针相比,delegate是面向对象、类型安全、可靠的受控(managed)对象。也就是说,runtime能够保证delegate指向一个有效的方法,你无须担心delegate会指向无效地址或者越界地址。

实现一个delegate:
1. 声明一个delegate对象,它应当与你想要传递的方法具有相同的参数和返回值类型。
2. 创建delegate对象,并将你想要传递的函数作为参数传入。
3. 在要实现异步调用的地方,通过上一步创建的对象来调用方法。

下面是一个简单的例子:

public class MyDelegateTest  {  // 步骤1,声明delegate对象   public delegate void MyDelegate(string name);   // 这是我们欲传递的方法,它与MyDelegate具有相同的参数和返回值类型   public static void MyDelegateFunc(string name)  {   Console.WriteLine("Hello, {0}", name);   }  public static void Main ()   {   // 步骤2,创建delegate对象   MyDelegate md = new MyDelegate(MyDelegateTest.MyDelegateFunc);   // 步骤3,调用delegate   md("sam1111");   }
}

输出结果是:Hello, sam1111

下面我们来看看事件是如何处理的:

事件(event)

C#中的事件处理实际上是一种具有特殊签名的delegate,象下面这个样子:
public delegate void MyEventHandler(object sender, MyEventArgs e);

其中的两个参数,sender代表事件发送者,e是事件参数类。 MyEventArg类用来包含与事件相关的数据,所有的事件参数类都必须从System.EventArgs类派生。当然,如果你的事件不含特别的参数,那么可以直接用System.EventArgs类作为参数。

结合delegate的实现,我们可以将自定义事件的实现归结为以下几步:
1:定义对象类型,它有两个参数,第一个参数是事件发送者对象,第二个参数是事件参数类对象。
2:定义事件参数类,此类应当从System.EventArgs类派生。如果事件不带参数,这一步可以省略。
3:定义事件处理方法,它应当与delegate对象具有相同的参数和返回值类型。
4:用event关键字定义事件对象,它同时也是一个delegate对象。
5:用+=操作符添加事件到事件队列中(-=操作符能够将事件从队列中删除)。
6:**在需要触发事件的地方用调用delegate的方式写事件触发方法。**一般来说,此方法应为protected访问限制,既不能以public方式调用,但可以被子类继承。名字是可以是OnEventName
7:在适当的地方调用事件触发方法触发事件。

下面是一个例子,例子模仿容器和控件的模式,由控件触发一个事件,在容器中捕捉并且进行处理。 事件的触发者:

/// <summary>
/// 事件的触发者
/// </summary>
public class Control
{  public delegate void SomeHandler(object sender, System.EventArgs e);  /**  * 可以采用系统提供的System.EventHandler, 这里为了说明情况使用了自己定义的delegate  * 如果需要在事件的参数中使用自己定义的类型,也要自己定义delegate  */  //public event System.EventHandler SomeEvent;  public event SomeHandler SomeEvent;  public Control()  {  //这里使用的delegate必须与事件中声名的一致  //this.SomeEvent += new System.EventHandler(this.Control_SomeEvent);  this.SomeEvent += new SomeHandler(this.ProcessSomeEvent);  }  public void RaiseSomeEvent()  {  EventArgs e = new EventArgs();  Console.Write("Please input 'a':");  string s = Console.ReadLine();  //在用户输入一个小a的情况下触发事件,否则不触发  if (s == "a")  {  SomeEvent(this, e);  }  }  //事件的触发者自己对事件进行处理,这个方法的参数必须和代理中声名的一致  private void ProcessSomeEvent(object sender, EventArgs e)  {  Console.WriteLine("hello");  }
}

事件的接收者:


/// <summary>
/// 事件的接收和处理者
/// </summary>
class Container
{  private Control ctrl = new Control();  public Container()  {  //这里使用的delegate必须与事件中声名的一致  //ctrl.SomeEvent += new EventHandler(this.OnSomeEvent);  ctrl.SomeEvent += new Control.SomeHandler(this.ResponseSomeEvent);  ctrl.RaiseSomeEvent();  }  public static void Main()  {  Container pane = new Container();  //这个readline是暂停程序用的,否则画面会一闪而过什么也看不见  Console.ReadLine();  }  //这是事件的接受者对事件的响应  private void ResponseSomeEvent(object sender, EventArgs e)  {  Console.WriteLine("Some event occur!");  }
}

程序运行的结果如下:

please input ‘a’:a

hello

Some event occur!

事件的应用

例如有下面的需求需要实现:程序主画面中弹出一个子窗口。此时主画面仍然可以接收用户的操作(子窗口是非模态的)。子窗口上进行某些操作,根据操作的结果要在主画面上显示不同的数据。
主画面弹出子窗口后,将自己的指针交给子画面,然后在子画面中使用这个指针,调用主画面提供的方法,改变主画面上的数据显示。这样虽然可以达到目的,但是各个模块之间产生了很强的耦合。一般说来模块之间的调用应该是单方向的:模块A调用了模块B,模块B就不应该反向调用A,否则就破坏了程序的层次,加强了耦合程度,也使得功能的改变和追加变得很困难。
这时正确的做法应该是在子窗口的操作过程中发出各种事件,而由主窗口捕捉这些事件进行处理,各个模块专心的做自己的事情,不需要过问其他模块的事情。

2、显示属性、事件,及其修改

我们对于默认的控件需要改动才会更有利于我们的使用,于是我们可以发现可以点击我们拖动进来的控件,右击,点击属性,就会出现控件的属性。

常见控件属性介绍

https://blog.csdn.net/iteye_4537/article/details/82195289?ops_request_misc=&request_id=&biz_id=102&utm_term=C#%E6%8E%A7%E4%BB%B6%E5%B1%9E%E6%80%A7%E4%BB%8B%E7%BB%8D&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-3-82195289.pc_search_result_hbase_insert
https://blog.csdn.net/fwx02/article/details/8294303?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161960147116780261943755%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161960147116780261943755&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-3-8294303.pc_search_result_hbase_insert&utm_term=C%23%E6%8E%A7%E4%BB%B6%E5%B1%9E%E6%80%A7%E4%BB%8B%E7%BB%8D

1、常用属性
(1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。

//最大感触是,当需要建立连接和初始化时候,需要准确得知该控件的名字,因为有大小写之分,不可盲目去用

(2) WindowState属性: 用来获取或设置窗体的窗口状态。 取值有三种: Normal (窗体正常显示)、 Minimized
(窗体以最小化形式显示)和 Maximized(窗体以最大化形式显示)。
(3)StartPosition属性:用来获取或设置运行时窗体的起始位置。
(4)Text属性:该属性是一个字符串属性,用来设置或返回在窗口标题栏中显示的文字。
可以显示button上不同的字
(5)Width属性:用来获取或设置窗体的宽度。
(6)Height属性:用来获取或设置窗体的高度。
(7)Left属性:用来获取或设置窗体的左边缘的x坐标(以像素为单位)。
(8)Top属性:用来获取或设置窗体的上边缘的y坐标(以像素为单位)。
(9)ControlBox属性:用来获取或设置一个值,该值指示在该窗体的标题栏中是否显示控制框。值为true
时将显示控制框,值为false时不显示控制框。
(10)MaximizeBox属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最大化按钮。值为 true时显示最大化按钮,值为false时不显示最大化按钮。
(11)MinimizeBox 属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最小化按钮。值为 true时显示最小化按钮,值为false时不显示最小化按钮。
(12)AcceptButton 属性:该属性用来获取或设置一个值,该值是一个按钮的名称,当按 Enter 键时就相当于单击了窗体上的该按钮。
(13)CancelButton 属性:该属性用来获取或设置一个值,该值是一个按钮的名称,当按 Esc 键时就相当于单击了窗体上的该按钮。

那么acceptBox 和CancelBox有什么区别嘛:
答:

https://blog.csdn.net/u013457167/article/details/42478857

(14)Modal 属性:该属性用来设置窗体是否为有模式显示窗体。如果有模式地显示该窗体,该属性值为true;否则为 false。当有模式地显示窗体时,只能对模式窗体上的对象进行输入。必须隐藏或关闭模式窗体(通常是响应某个用户操作),然后才能对另一窗体进行输入。有模式显示的窗体通常用做应用程序中
的对话框。
(15)ActiveControl属性:用来获取或设置容器控件中的活动控件。窗体也是一种容器控件。
(16)ActiveMdiChild属性:用来获取多文档界面(MDI)的当前活动子窗口。
(17)AutoScroll 属性:用来获取或设置一个值,该值指示窗体是否实现自动滚动。如果此属性值设置为true,则当任何控件位于窗体工作区之外时,会在该窗体上显示滚动条。另外,当自动滚动打开时,窗体的工作区自动滚动,以使具有输入焦点的控件可见。
(18)BackColor属性:用来获取或设置窗体的背景色。
(19)BackgroundImage属性:用来获取或设置窗体的背景图像。
(20)Enabled 属性:用来获取或设置一个值,该值指示控件是否可以对用户交互作出响应。如果控件可以对用户交互作出响应,则为 true;否则为false。默认值为true。
(21)Font属性:用来获取或设置控件显示的文本的字体。
(22)ForeColor属性:用来获取或设置控件的前景色
(23)IsMdiChild属性:获取一个值,该值指示该窗体是否为多文档界面(MDI)子窗体。值为 true时,是子窗体,值为false时,不是子窗体。
(24)IsMdiContainer 属性:获取或设置一个值,该值指示窗体是否为多文档界面(MDI)中的子窗体的容器。值为true时,是子窗体的容器,值为false时,不是子窗体的容器。
(25)KeyPreview属性:用来获取或设置一个值,该值指示在将按键事件传递到具有焦点的控件前,窗体是否将接收该事件。值为true时,窗体将接收按键事件,值为false时,窗体不接收按键事件。
(26)MdiChildren属性:数组属性。数组中的每个元素表示以此窗体作为父级的多文档界面(MDI)子窗
体。
(27)MdiParent属性:用来获取或设置此窗体的当前多文档界面(MDI)父窗体。
(28)ShowInTaskbar属性:用来获取或设置一个值,该值指示是否在Windows任务栏中显示窗体。
(29)Visible属性:用于获取或设置一个值,该值指示是否显示该窗体或控件。值为true 时显示窗体或控件,为 false时不显示。
(30)Capture属性:如果该属性值为true,则鼠标就会被限定只由此控件响应,不管鼠标是否在此控件的范围内。

窗体常用的方法

下面介绍一些窗体的最常用方法。
(1)Show方法:该方法的作用是让窗体显示出来,其调用格式为:

窗体名.Show();

其中窗体名是要显示的窗体名称。

(2)Hide方法:该方法的作用是把窗体隐藏出来,其调用格式为:

窗体名.Hide();

其中窗体名是要隐藏的窗体名称。

(3)Refresh方法:该方法的作用是刷新并重画窗体,其调用格式为:

窗体名.Refresh();

其中窗体名是要刷新的窗体名称。

(4)Activate方法:该方法的作用是激活窗体并给予它焦点。其调用格式为:

窗体名.Activate();

其中窗体名是要激活的窗体名称。

(5)Close方法:该方法的作用是关闭窗体。其调用格式为:

窗体名.Close();

其中窗体名是要关闭的窗体名称。

(6)ShowDialog方法:该方法的作用是将窗体显示为模式对话框。其调用格式为:

窗体名.ShowDialog();

常见控件事件介绍

(1)Load事件:该事件在窗体加载到内存时发生,即在第一次显示窗体前发生。
(2)Activated事件:该事件在窗体激活时发生
(3)Deactivate事件:该事件在窗体失去焦点成为不活动窗体时发生
(4)Resize事件:该事件在改变窗体大小时发生
(5)Paint事件:该事件在重绘窗体时发生
(6)Click事件:该事件在用户单击窗体时发生
(7)DoubleClick事件:该事件在用户双击窗体时发生
(8)Closed事件:该事件在关闭窗体时发生

文本框类控件

Label 控件

1、常用属性:
(1)Text属性:用来设置或返回标签控件中显示的文本信息
(2)AutoSize 属性:用来获取或设置一个值,该值指示是否自动调整控件的大小以完整显示其内容。取值为 true时,控件将自动调整到刚好能容纳文本时的大小,取值为false时,控件的大小为设计时的大小。
默认值为false。
(3)Anchor 属性:用来确定此控件与其容器控件的固定关系的。所谓容器控件指的是这样一种情况:往往在控件之中还有一个控件,例如最典型的就是窗体控件中会包含很多的控件,像标签控件、文本框等。

这时称包含控件的控件为容器控件或父控件,而父控件称为子控件。这时将遇到一个问题,即子控件与父控件的位置关系问题,即

当父控件的位置、大小变化时,子控件按照什么样的原则改变其位置、大小。Anchor属性就规定了这个原则。

对于 Anchor 属性,可以设定 Top、Bottom、Right、Left 中的任意几
种,设置的方法是在属性窗口中单击Anchor属性右边的箭头,将会
出现窗口,通过它可设置 Anchor 属性值。选中变黑的方位即为设定的方位控制,即图中所示的为 Left、Right、Bottom。此时,如果父窗口变化,子窗口将保证其左边缘与容器左边的距离、上边缘与容器上边的距离、底边与容器底边的距离等不变,

(4)BackColor属性:
用来获取或设置控件的背景色。当该属性值设置为 Color.Transparent 时,标签将透明显示,即背景色不再显示出来。
(5)BorderStyle 属性:用来设置或返回边框。有三种选择:
BorderStyle.None 为无边框(默认),BorderStyle.FixedSingle 为固
定单边框,BorderStyle.Fixed3D 为三维边框。

(6)TabIndex属性:用来设置或返回对象的Tab键顺序
(7)Enabled 属性:用来设置或返回控件的状态。值为 true 时允
许使用控件,值为 false 时禁止使用控件,此时标签呈暗淡色,一
般在代码中设置。另外,标签还具有Visible、ForeColor、Font等属性,具体含义请参考窗体的相应属性。
3、TextBox 控件
1、主要属性:
(1)Text属性:Text属性是文本框最重要的属性,因为要显示的文本就包含在Text属性中。默认情况下,最多可在一个文本框中输入2048个字符。如果将MultiLine属性设置为true,则最多可输入32KB 的文本。
Text属性可以在设计时使用【属性】窗口设置,也可以在运行时用代码设置或者通过用户输入来设置。可以在运行时通过读取Text属性来获得文本框的当前内容。
(2)MaxLength 属性:用来设置文本框允许输入字符的最大长度,该属性值为 0 时,不限制输入的字符数。
(3)MultiLine 属性:用来设置文本框中的文本是否可以输入多行并以多行显示。值为 true 时,允许多行显示。值为false时不允许多行显示,一旦文本超过文本框宽度时,超过部分不显示。
(4)HideSelection属性:用来决定当焦点离开文本框后,选中的文本是否还以选中的方式显示,值为true,则不以选中的方式显示,值为 false将依旧以选中的方式显示。
(5)ReadOnly属性:用来获取或设置一个值,该值指示文本框中的文本是否为只读。值为 true时为只读,值为 false时可读可写
(6)PasswordChar 属性:是一个字符串类型,允许设置一个字符,运行程序时,将输入到 Text 的内容全部显示为该属性值,从而起到保密作用,通常用来输入口令或密码。
(7) ScrollBars属性: 用来设置滚动条模式, 有四种选择: ScrollBars.None (无滚动条), ScrollBars.Horizontal
(水平滚动条),ScrollBars.Vertical(垂直滚动条),ScrollBars.Both(水平和垂直滚动条)。
注意:**只有当MultiLine属性为true时,该属性值才有效。在WordWrap属性值为true时,水平滚动条将不起作用 **

(8)SelectionLength属性:用来获取或设置文本框中选定的字符数。只能在代码中使用,值为0 时,表示未选中任何字符。
(9)SelectionStart属性:用来获取或设置文本框中选定的文本起始点。只能在代码中使用,第一个字符位置为0,第二个字符的位置为1,依此类推。
(10)SelectedText 属性:用来获取或设置一个字符串,该字符串指示控件中当前选定的文本。只能在代码中使用。
(11)Lines:该属性是一个数组属性,用来获取或设置文本框控件中的文本行。即文本框中的每一行存放在 Lines数组的一个元素中。
(12)Modified:用来获取或设置一个值,该值指示自创建文本框控件或上次设置该控件的内容后,用户是否修改了该控件的内容。值为true表示修改过,值为 false表示没有修改过。
(13)TextLength属性:用来获取控件中文本的长度
(14)WordWrap:用来指示多行文本框控件在输入的字符超过一行宽度时是否自动换行到下一行的开始,值为 true,表示自动换到下一行的开始,值为false表示不自动换到下一行的开始。

TextBox 控件常用方法

(1)AppendText方法:把一个字符串添加到文件框中文本的后面,调用的一般格式如下:

文本框对象.AppendText(str)

参数 str是要添加的字符串。

(2)Clear方法:从文本框控件中清除所有文本。调用的一般格式如下:

文本框对象.Clear()

该方法无参数。

(3)Focus方法:是为文本框设置焦点。如果焦点设置成功,值为 true,否则为false。调用的一般格式如下:

文本框对象.Focus()

该方法无参数。

(4)Copy方法:将文本框中的当前选定内容复制到剪贴板上。调用的一般格式如下:

文本框对象.Copy()

该方法无参数。
(5)Cut方法:将文本框中的当前选定内容移动到剪贴板上。调用的一般格式如下:

文本框对象.Cut()

该方法无参数。
(6)Paste方法:用剪贴板的内容替换文本框中的当前选定内容。调用的一般格式如下:

文本框对象.Paste()

该方法无参数。
(7)Undo 方法:撤销文本框中的上一个编辑操作。调用的一般格式如下:

文本框对象.Undo()

该方法无参数。
(8)ClearUndo方法:从该文本框的撤销缓冲区中清除关于最近操作的信息,根据应用
程序的状态,可以使用此方法防止重复执行撤销操作。调用的一般格式如下:

文本框对象.ClearUndo()

该方法无参数。
(9)Select方法:用来在文本框中设置选定文本。调用的一般格式如下:

文本框对象.Select(start,length)

该方法有两个参数,第一个参数start用来设定文本框中当前选定文本的第一个字符的位 置,第二个参数length用来设定要选择的字符数。
(10)SelectAll方法:用来选定文本框中的所有文本。调用的一般格式如下:

文本框对象.SelectAll()

该方法无参数。

TextBox 控件常用事件

(1)GotFocus事件:该事件在文本框接收焦点时发生
(2)LostFocus事件:该事件在文本框失去焦点时发生
(3)TextChanged事件:该事件在Text属性值更改时发生。无论是通过编程修改还是用户交互更改文本框的 Text属性值,均会引发此事件。

RichTextBox控件

RichTextBox是一种既可以输入文本、 又可以编辑文本的文字处理控件, 与TextBox控件相比, RichTextBox
控件的文字处理功能更加丰富, 不仅可以设定文字的颜色、 字体, 还具有字符串检索功能。
另外, RichTextBox控件还可以打开、编辑和存储.rtf格式文件、ASCII文本格式文件及Unicode编码格式的文件。

RichTextBox控件常用属性

上面介绍的 TextBox 控件所具有的属性,RichTextBox 控件基本上都具有,除此之外,该控件还具有一些其他属性。
(1)RightMargin属性:用来**设置或获取右侧空白的大小,单位是像素。**通过该属性可以设置右侧空白,
如希望右侧空白为50像素,可使用如下语句:

RichTextBox1.RightMargin=RichTextBox1.Width-50;

(2)Rtf属性:用来获取或设置RichTextBox控件中的文本,包括所有RTF格式代码。可以使用此属性将RTF格式文本放到控件中以进行显示,或提取控件中的RTF格式文本。此属性通常用于在RichTextBox控件和其他RTF源(如 MicrosoftWord或 Windows写字板)之间交换信息。
(3)SelectedRtf 属性:用来获取或设置控件中当前选定的 RTF 格式的格式文本。此属性使用户得以获取控件中的选定文本,包括RTF格式代码。如果当前未选定任何文本,给该属性赋值将把所赋的文本插入到插入点处。如果选定了文本,则给该属性所赋的文本值将替换掉选定文本。
(4)SelectionColor属性:用来获取或设置当前选定文本或插入点处的文本颜色。
(5)SelectionFont属性:用来获取或设置当前选定文本或插入点处的字体

RichTextBox控件常用方法

前面介绍的 TextBox 控件所具有的方法,RichTextBox 控件基本上都具有,除此之外,该控件还具有一些
其他方法。
(1)Redo方法:用来重做上次被撤销的操作。调用的一般格式如下:

RichTextBox对象.Redo()

该方法无参数。

(2)Find方法:用来从RichTextBox控件中查找指定的字符串。经常使用的调用格式如下:
[格式1]:

RichTextBox对象.Find(str)

[功能]:在指定的“RichTextBox”控件中查找文本,并返回搜索文本的第一个字符在控件内的位置。如果未找到搜索字符串或者str参数指定的搜索字符串为空,则返回值为1。

[格式2]:

RichTextBox对象.Find(str,RichTextBoxFinds)

[功能]:在“RichTextBox 对象”指定的文本框中搜索 str 参数中指定的文本,并返回文本的第一个字符在控件内的位置。如果返回负值,则未找到所搜索的文本字符串。还可以使用此方法搜索特定格式的文本。参数RichTextBoxFinds指定如何在控件中执行文本搜索,

https://bbs.csdn.net/topics/280064?list=134226
https://blog.csdn.net/Janet_1994/article/details/69201380

在这里插入代码片

NumericUpDown 控件

https://blog.csdn.net/nyist_yangguang/article/details/77368310?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161960706016780265462291%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161960706016780265462291&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-1-77368310.pc_search_result_hbase_insert&utm_term=NumericUpDown+%E6%8E%A7%E4%BB%B6+

【Windows 窗体】控件组中的 NumericUpDown 控件看起来像是一个文本框与一对用户可单击以调整值的
箭头的组合。可以通过单击向上和向下按钮、按向上和向下箭头键来增大和减小数字,也可以直接输入数
字。单击向上箭头键时,值向最大值方向增加;单击向下箭头键时,值
向最小值方向减少。
1、常用属性:
(1)DecimalPlaces:获取或设置该控件中显示的小数位数。
(2)Hexadecimal:获取或设置一个值,该值指示该控件是否以十六进制格式显示所包
含的值。
(3)Increment:获取或设置单击向上或向下按钮时,该控件递增或递减的值。
(4)Maximum:获取或设置该控件的最大值。
(5)Minimum:获取或设置该控件的最小值。
(6)Value:获取或设置该控件的当前值。
与 TextBox控件一样,NumericUpDown控件的常用事件有:ValueChanged、GotFocus、LostFocus等。
按钮类控件

Button 控件

https://blog.csdn.net/softn/article/details/51718349?ops_request_misc=&request_id=&biz_id=102&utm_term=Button%20%E6%8E%A7%E4%BB%B6%20&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-4-51718349.pc_search_result_hbase_insert
https://blog.csdn.net/weixin_49167067/article/details/114750915?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161960713016780269879187%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161960713016780269879187&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-114750915.pc_search_result_hbase_insert&utm_term=Button+%E6%8E%A7%E4%BB%B6+

Button控件又称按钮控件,是 Windows应用程序中最常用的控件之一,通常用它来执行命令。如果按钮具有焦点,就可以使用鼠标左键、Enter键或空格键触发该按钮的Click事件。
通过设置窗体的AcceptButton或CancelButton 属性,无论该按钮是否有焦点,都可以使用户通过按 Enter 或 Esc 键来触发按钮的 Click
事件。一般不使用 Button 控件的方法。

Button 控件也具有许多如 Text、ForeColor 等的常规属性,此处不再介绍,只介绍该控件有特色的属性。以后介绍的控件也采用同样的方法来处理。

1、常用属性
(1)DialogResult属性:当使用ShowDialog方法显示窗体时,可以使用该属性设置当用户按了该按钮后,

ShowDialog方法的返回值。值有:OK、Cancel、Abort、Retry、Ignore、Yes、No等。

(2)Image属性:用来设置显示在按钮上的图像。
(3)FlatStyle属性:用来设置按钮的外观
2、常用事件:
(1)Click事件:当用户用鼠标左键单击按钮控件时,将发生该事件
(2)MouseDown事件:当用户在按钮控件上按下鼠标按钮时,将发生该事件
(3)MouseUp事件:当用户在按钮控件上释放鼠标按钮时,将发生该事件。

GroupBox 控件

https://blog.csdn.net/ztzi321/article/details/17512179?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161960732916780357233720%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161960732916780357233720&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-2-17512179.pc_search_result_hbase_insert&utm_term=GroupBox+%E6%8E%A7%E4%BB%B6+

GroupBox控件又称为分组框,它在工具箱中的图标是 。该控件常用于为其他控件提供可
识别的分组,其典型的用法之一就是给RadioButton控件分组。可以通过分组框的Text属性为分组框中的控件向用户提供提示信息。
设计时,向GroupBox 控件中添加控件的方法有两种:

一是直接在分组框中绘制控件;
二是把某一个已存在的控件复制到剪贴板上,然后选中分组框,再执行粘贴操作即可。

位于分组框中的所有控件随着分组框的移动而一起移动,随着分组框的删除而全部删除,分组框的Visible属性和Enabled属性也会影响到分组框中的所有控件。分组框的最常用的属性是Text,一般用来给出分组提示。

RadioButton控件

RadioButton又称单选按钮,其在工具箱中的图标为 ,单选按钮通常成组出现,用于提供两个或多个互斥选项,即在一组单选钮中只能选择一个 。

RadioButton控件常用属性:

(1)Checked属性:用来设置或返回单选按钮是否被选中,选中时值为true,没有选中时值为false。
(2)AutoCheck 属性:如果 AutoCheck 属性被设置为 true(默认),那么当选择该单选按钮时,将自动清除该组中所有其他单选按钮。对一般用户来说,不需改变该属性,采用默认 值(true)即可。
(3)Appearance 属性:用来获取或设置单选按钮控件的外观。当其取值为 Appearance.Button 时,将使单选按钮的外观像命令按钮一样:当选定它时,它看似已被按下。当取值为 Appearance.Normal 时,就是默认的单选按钮的外观。
(4)Text属性:用来设置或返回单选按钮控件内显示的文本,该属性也可以包含访问键,即前面带有**“&”符号的字母**,这样用户就可以通过同时按Alt键和访问键来选中控件。

RadioButton控件常用事件:

(1)Click事件:当单击单选按钮时,将把单选按钮的Checked属性值设置为true,同时发生Click事件。
(2)CheckedChanged事件:当Checked属性值更改时,将触发CheckedChanged事件。

CheckBox 控件

CheckBox控件的常用属性如下。
(1)TextAlign属性:用来设置控件中文字的对齐方式,有9种选择.
从上到下、从左至右分别是:
ContentAlignment.TopLeft、
ContentAlignment.TopCenter、
ContentAlignment.TopRight、
ContentAlignment.MiddleLeft、
ContentAlignment.MiddleCenter、
ContentAlignment.MiddleRight、
ContentAlignment.BottomLeft、
ContentAlignment.BottomCenter
和 ContentAlignment.BottomRight。
该属性的默认值为ContentAlignment.MiddleLeft,

文字左 对齐、居控件垂直方向中央。
(2)ThreeState属性:用来返回或设置复选框是否能表示三种状态,如果属性值为true时,表示可以表示三种状态—选中、没选中和中间态
(CheckState.Checked、CheckState.UncheckedCheckState.Indeterminate),属性值为false时,只能表示两种状 态——选中和没选中。
(3)Checked属性:用来设置或返回复选框是否被选中,值为true时,表示复选框被选中,值为false时,表示复选框没被选中。当ThreeState属性值为true时,中间态也表示选中。
(4)CheckState 属性:用来设置或返回复选框的状态。在 ThreeState 属性值为 false 时,取值有CheckState.Checked或CheckState.Unchecked。在ThreeState属性值被设置为True时,CheckState还可以取值CheckState.Indeterminate,在此时,复选框显示为浅灰色选中状态,该状态通常表示该选项下的多个子选项未完全选中。
CheckBox控件的常用事件有Click和CheckedChanged等,其含义及触发时机与单选按钮
完成一致。

列表类控件

ListBox 控件

ListBox 控件又称列表框,它在工具箱中的图标为,它显示一个项目列表供用户选择。在列表框中,用户
一次可以选择一项,也可以选择多项。
1、常用属性:
(1) Items属性: 用于存放列表框中的列表项,
是一个集合。通过该属性,可以添加列表项、
移除列表项和获得列表项的数目。
(2)MultiColumn 属性:用来获取或设置一
个值,该值指示ListBox是否支持多列。值
为 true 时表示支持多列,值为 false 时不支持
多列。当使用多列模式时,可以使控件得以显
示更多可见项,如图9-19 所示。
(3)ColumnWidth 属性:用来获取或设置多
列 ListBox控件中列的宽度。
(4)SelectionMode属性:用来获取或设置在ListBox控件中选择列表项的方法。当 SelectionMode属性设
置为 SelectionMode.MultiExtended 时,按下 Shift 键的同时单击鼠标或者同时按 Shift 键和箭头键之一(上
箭头键、下箭头键、左箭头键和右箭头键),会将选定内容从前一选定项扩展到当前项。按 Ctrl 键的同时
单击鼠标将选择或撤销选择列表中的某项;当该属性设置为 SelectionMode.MultiSimple 时,鼠标单击或按- 11 -
空格键将选择或撤销选择列表中的某项;该属性的默认值为SelectionMode.One,则只能选择一项。
(5)SelectedIndex属性:用来获取或设置ListBox控件中当前选定项的从零开始的索引。如果未选定任何
项,则返回值为1。对于只能选择一项的ListBox控件,可使用此属性确定ListBox中选定的项的索引。如
果 ListBox 控件的 SelectionMode 属性设置为 SelectionMode.MultiSimple 或 SelectionMode.MultiExtended,
并在该列表中选定多个项,此时应用SelectedIndices来获取选定项的索引。
(6)SelectedIndices。该属性用来获取一个集合,该集合包含 ListBox 控件中所有选定项的从零开始的索
引。
(7)SelectedItem属性:获取或设置ListBox中的当前选定项。
(8)SelectedItems属性:获取 ListBox控件中选定项的集合,通常在ListBox控件的SelectionMode属性值
设置为SelectionMode.MultiSimple或SelectionMode.MultiExtended(它指示多重选择ListBox)时使用。
(9)Sorted属性:获取或设置一个值,该值指示ListBox控件中的列表项是否按字母顺序排序。如果列表
项按字母排序,该属性值为true;如果列表项不按字母排序,该属性值为false。默认值为false。在向已排
序的 ListBox控件中添加项时,这些项会移动到排序列表中适当的位置。
(10)Text 属性:该属性用来获取或搜索 ListBox 控件中当前选定项的文本。当把此属性值设置为字符串
值时,ListBox 控件将在列表内搜索与指定文本匹配的项并选择该项。若在列表中选择了一项或多项,该
属性将返回第一个选定项的文本。
(11)ItemsCount属性:该属性用来返回列表项的数目。
2、常用方法:
(1)FindString方法:用来查找列表项中以指定字符串开始的第一个项,有两种调用格式。
[格式1]:
ListBox对象.FindString(s);
[功能]:在“ListBox 对象”指定的列表框中查找字符串 s,如果找到则返回该项从零开始的索引;如果找
不到匹配项,则返回ListBox.NoMatches。
[格式2]:
ListBox对象.FindString(s,n);
[功能]:在 ListBox 对象指定的列表框中查找字符串 s,查找的起始项为n+1,即 n 为开始查找的前一项的
索引。如果找到则返回该项从零开始的索引;如果找不到匹配项,则返回ListBox.NoMatches。
注意:FindString 方式只是词语部分匹配,即要查找的字符串在列表项的开头,便认为是匹配的,如果要
精确匹配,即只有在列表项与查找字符串完全一致时才认为匹配,可使用FindStringExact方法,调用格式
与功能与FindString基本一致。
(2)SetSelected方法:用来选中某一项或取消对某一项的选择,调用格式及功能如下。
[格式]:
ListBox对象.SetSelected(n,l);
[功能]:如果参数 l 的值是 true,则在 ListBox 对象指定的列表框中选中索引为 n 的列表项,如果参数l 的
值是 false,则索引为n 的列表项未被选中。
(3)Items.Add方法:用来向列表框中增添一个列表项,调用格式及功能如下。
[格式]:
ListBox对象.Items.Add(s);
[功能]:把参数s添加到“listBox对象”指定的列表框的列表项中。
(4)Items.Insert方法:用来在列表框中指定位置插入一个列表项,调用格式及功能如下。
[格式]:
ListBox对象.Items.Insert(n,s);
[功能]:参数n代表要插入的项的位置索引,参数 s代表要插入的项,其功能是把s插入到“listBox对象”
指定的列表框的索引为n的位置处。
(5)Items.Remove方法:用来从列表框中删除一个列表项,调用格式及功能如下。
[格式]:
ListBox对象.Items.Remove(k);
[功能]:从 ListBox对象指定的列表框中删除列表项s。
(6)Items.Clear方法:用来清除列表框中的所有项。其调用格式如下:
ListBox对象.Items.Clear();
该方法无参数。
(7)BeginUpdate方法和EndUpdate方法:这两个方法均无参数,调用格式分别如下:
ListBox对象.BeginUpdate();
ListBox对象.EndUpdate();
这两个方法的作用是保证使用 Items.Add 方法向列表框中添加列表项时,不重绘列表框。即在向列表框添
加项之前,调用BeginUpdate方法,以防止每次向列表框中添加项时都重新
绘制 ListBox 控件。完成向列表框中添加项的任务后,再调用 EndUpdate 方法使 ListBox 控件重新绘制。
当向列表框中添加大量的列表项时,使用这种方法添加项可以防止在绘制 ListBox 时的闪烁现象。一个例
子程序如下:
publicvoidAddToMyListBox()
{listBox1.BeginUpdate();
for(intx=1;x<5000;x++)
{
listBox1.Items.Add(“Item”+x.ToString());
}
listBox1.EndUpdate();
}
ListBox控件常用事件有Click和 SelectedIndexChanged,SelectedIndexChanged事件在列表框中改变选中项
时发生。
11、ComboBox 控件
ComboBox 控件又称组合框,在工具箱中的图标为。默认情况下,组合框分两个部分显示:顶部是一个允
许输入文本的文本框,下面的列表框则显示列表项。可以认为ComboBox就是文本框与列表框的组合,与
文本框和列表框的功能基本一致。与列表框相比,组合框不能多选,它无 SelectionMode 属性。但组合框
有一个名为DropDownStyle的属性,该属性用来设置或获取组合框的样式,其取值及含义如表9-10所示。
组合框的各种样式如图9-22 所示, 左边的组合框能够通过文本框输入文本, 中间的组合框则不能输入文本,
只能选择列表项。
12、CheckedListBox 控件
CheckedListBox控件又称复选列表框,它扩展了ListBox控件,它几乎
能完成列表框可以完成的所有任务,并且还可以在列表项旁边显示复
选标记。两种控件间的其他差异在于,复选列表框只支持
DrawMode.Normal,并且复选列表框只能有一项选定或没有任何选定。此处需要注意一点:选定的项是指
窗体上突出显示的项,已选中的项是指左边的复选框被选中的项。复选列表框的样式如图9-23所示。
除具有列表框的全部属性外,它还具有以下属性。
(1)CheckOnClick属性:获取或设置一个值,该值指示当某项被选定时
是否应切换左侧的复选框。如果立即切换选中标记,则该属性值为true;
否则为false。默认值为false。
(2)CheckedItems 属性:该属性是复选列表框中选中项的集合,只代表
处于CheckState. Checked或CheckState.Indeterminate状态的那些项。 该集
合中的索引按升序排列。
(3)CheckedIndices 属性:该属性代表选中项(处于选中状态或中间状
态的那些项)索
引的集合。
PictureBox控件的使用

PictureBox 控件的使用

PictureBox 控件又称图片框,常用于图形设计和图像处理应用程序,在该控件中可以加载的图像文件格式
有:位图文件(.Bmp)、图标文件(.ICO)、图元文件(.wmf)、.JPEG 和.GIF 文件。下而仅介绍该控件的
常用属性和事件。

PictureBox 控件常用属性:

(1)Image属性:用来设置控件要显示的图像。把文件中的图像加载到图片框通常采用以下三种方式。
设计时单击Image属性,在其后将出现【…】按钮,单击该按钮将出现一个【打开】对话框,在该对话框
中找到相应的图形文件后单击【确定】按钮。产生一个Bitmap类的实例并赋值给Image属性。形式如下:
Bitmapp=newBitmap(图像文件名);
pictureBox对象名.Image=p;
通过 Image.FromFile方法直接从文件中加载。形式如下:
pictureBox对象名.Image=Image.FromFile(图像文件名);
(2)SizeMode属性:用来决定图像的显示模式。

Timer 控件

Timer 控件又称定时器控件或计时器控件,在工具箱中的图标是 ,该控件的主要作用是按一定的
时间间隔周期性地触发一个名为Tick的事件, 因此在该事件的代码中可以放置一些需要每隔一段时间重复
执行的程序段。在程序运行时,定时器控件是不可见
的。

Timer 控件常用属性:

(1)Enabled 属性:用来设置定时器是否正在运行。值为 true 时,定时器正在运行,值为 false 时,定时
器不在运行。
(2)Interval属性:用来设置定时器两次Tick事件发生的时间间隔,以毫秒为单位。如它的值设置为500,
则将每隔0.5秒发生一个Tick事件。
2、常用方法:
(1)Start方法:用来启动定时器。调用的一般格式如下:
Timer控件名.start();
该方法无参数。
(2)Stop方法:用来停止定时器。调用的一般格式如下:
Timer控件名.stop();
该方法无参数。
3、常用事件:
定义器控件响应的事件只有Tick,每隔Interval时间后将触发一次该事件。

ProgressBar控件

ProgressBar 控件又称进度条控件,它在工具栏中的图标为 ,该控件在水平栏中显示适当长度
的矩形来指示进程的进度。当执行进程时,进度条用系统突出显示颜色在水平栏中从左向右进行填充。进
程完成时,进度栏被填满。当某进程运行时间较长时,如果没有视觉提示,用户可能会认为应用程序不响
应,通过在应用程序中使用进度条,就可以告诉用户应用程序正在执行冗长的任务且应用程序仍在响应。
ProgressBar控件的常用属性如下。
(1)Maximum属性:用来设置或返回进度条能够显示的最大值,默认值为100。
(2)Minimum属性:用来设置或返回进度条能够显示的最小值,默认值为0。
(3)Value属性:用来设置或返回进度条的当前位置。
(4)Step属性:用来设置或返回一个值,该值用来决定每次调用PerformStep 方法时, Value属性增加的
幅度。例如,如果要复制一组文件,则可将 Step 属性的值设置为 1,并将 Maximum 属性的值设置为要复
制的文件总数。在复制每个文件时,可以调用PerformStep方法按Step属性的值增加进度栏。

ProgressBar控件的常用方法如下。

(1)Increment方法:用来按指定的数量增加进度条的值,调用的一般格式如下:
progressBar对象.Increment(n);
其功能是把“progressBar对象”指定的进度条对象的Value属性值增加n,n为整数。调用该方法之后,若
Value属性大于Maximum属性的值,则 Value属性值就是Maximum值,若Value属性小于Minimum属性
值,则 Value属性值就是Minimum值。
(2)PerformStep方法:用来按step属性值来增加进度条的Value属性值,调用的一般格式如下:
progressBar对象.PerformStep();
该方法无参数。例如,下列程序段是一个显示复制多个文件的进度的进度条使用方法。
privatevoidCopyWithProgress(string[]filenames)
{pBar1.Visible=true;
pBar1.Minimum=1;
pBar1.Maximum=filenames.Length;
pBar1.Value=1;
pBar1.Step=1;
for(intx=1;x<=filenames.Length;x++)
{if(CopyFile(filenames[x-1])==true)
{
pBar1.PerformStep();
}
}
}
ProgressBar控件能响应很多事件,但一般很少使用。

TrackBar控件

TrackBar 控件又称滑块控件、跟踪条控件,它在工具箱中的图标是“ ” 。该控件主要用于在
大量信息中进行浏览,或用于以可视形式调整数字设置。TrackBar控件有两部分:缩略图(也称为滑块)
和刻度线。缩略图是可以调整的部分,其位置与 Value 属性相对应。刻度线是按规则间隔分隔的可视化指
示符。跟踪条控件可以按指定的增量移动,并且可以水平或者垂直排列。
TrackBar控件的常用属性如下。
(1)Maximum属性:用来获取或设置TrackBar控件可表示的范围上限,即最大值。
(2)Minimum属性:用来获取或设置TrackBar控件可表示的范围下限,即最小值。
(3)Orientation属性:用来获取或设置一个值,该值指示跟踪条是在水平方向还是在垂
直方向。
(4)LargeChange属性:用来获取或设置一个值,该值指示当滑块长距离移动时应为Value属性中加上或
减去的值。
(5)SmallChange属性:用来获取或设置当滑块短距离移动时对Value属性进行增减的值。
(6)Value属性:用来获取或设置滑块在跟踪条控件上的当前位置的值。
(7)TickFrequency属性:用来获取或设置一个值,该值指定控件上绘制的刻度之间的增量。
(8)TickStyle 属性:用来获取或设置一个值,该值指示如何显示跟踪条上的刻度线。
TrackBar控件的常用事件是ValueChanged,该事件在TrackBar控件的Value属性值改变时发生。

HScrollBar 控件和 VScrollBar控件的使用

滚动条(ScrollBar)是大部分Windows应用程序中都具有的控件,是 Windows界面的
一种常见元素,通常分为水平滚动条(HscrollBar)和垂直滚动条(VscrollBar)。HScrollBar
在工具箱中的图标是,VScrollBar控件在工具箱中的图标是。这两
个控件主要用于在应用程序或控件中水平或垂直滚动,以方便在较长的列表中或大量信息中
转移。
1、常用属性:
(1)Minimum和 Maximum属性:与TrackBar控件的同名属性基本相同。
(2)Value属性:用于设置或返回滑块在滚动条中所处的位置,其默认值为0。当滑块
的位置值为最小值时,滑块移到水平滚动条的最左端位置,或移到垂直滚动条的顶端位置。
当滑块的位置值为最大值时,滑块移到水平滚动条的最右端位置或垂直滚动条的底端位置。
(3)SmallChange和LargeChange属性:这两个属性主要用于调整滑块移动的距离。其
中 SmallChange属性用于控制当鼠标单击滚动条两边的箭头时,滑块滚动的值,即 Value属性
增加或减小的值。而LargeChange属性则控制当用鼠标直接单击滚动条时滑块滚动的值。当
用户按下PageUp键或PageDown键或者在滑块的任何一边单击滚动条轨迹时,Value属性将
按照 LargeChange属性中设置的值进行增加或减小。
2、常用事件:
(1)Scroll事件:该事件在用户通过鼠标或键盘移动滑块后发生。
(2)ValueChanged事件:该事件在滚动条控件的Value属性值改变时发生。
滚动条的使用方法与TrackBar控件基本一致,此处不再赘述。
对话框类控件

OpenFileDialog 控件

OpenFileDialog控件又称打开文件对话框,主要用来弹出Windows中标准的【打开文件】
对话框。该控件在工具箱中的图标为 。

OpenFileDialog控件的常用属性

(1)Title属性:用来获取或设置对话框标题,默认值为空字符串(“”)。如果标题为空字符串,则系统将
使用默认标题: “打开” 。
(2)Filter属性:用来获取或设置当前文件名筛选器字符串,该字符串决定对话框的【另存为文件类型】或【文件类型】框中出现的选择内容。

对于每个筛选选项,筛选器字符串都包含

筛选器说明、垂直线条(|)和筛选器模式。不同筛选选项的字符串由垂直线条隔开,例如: “文本文件(.txt)|.txt|所有文件(.)|.

还可以通过用分号来分隔各种文件类型,可以将多个筛选器模式添加到筛选器中,例如:

“图像文件(.BMP;.JPG;.GIF)|.BMP;.JPG; .GIF|所有文件(.)|.” 。

(3)FilterIndex属性:用来获取或设置文件对话框中当前选定筛选器的索引。第一个筛选器的索引为1,默认值为1。
(4)FileName 属性:用来获取在打开文件对话框中选定的文件名的字符串。文件名既包含文件路径也包含扩展名。
如果未选定文件,该属性将返回空字符串(“”)
(5)InitialDirectory属性:用来获取或设置
文件对话框显示的初始目录,默认值为空字符串(“”)
(6)ShowReadOnly属性:用来获取或设置一个值,该值指示对话框是否包含只读复选框。如果对话框包含只读复选框,则属性值为true,否则属性值为false。默认值为false。
(7)ReadOnlyChecked属性:用来获取或设置一个值,该值指示是否选定只读复选框。如果选中了只读复选框,则属性值为true,反之,属性值为false。默认值为false。
(8)Multiselect属性:用来获取或设置一个值,该值指示对话框
是否允许选择多个文件。如果对话框允许同时选定多个文件,则该属性值为true,反之,属性值为false。默认值为false。
(9)FileNames属性:用来
获取对话框中所有选定文件的文件名。每个文件名都既包含文件路径又包含文件扩展名。如果未选定文件,该方法将返回空数组。
(10)RestoreDirectory属性:用来获取或设置一个值,**该值指示对话框在关闭前是否还原当前目录。**假设用户在搜索文件的过程中更改了目录,且该属性值为 true,那么,对话框会将当前目录还原为初始值,若该属性值false,则不还原成初始值。默认值为 false。

OpenFileDialog控件的常用属性

OpenFileDialog 控件的常用方法有两个:OpenFile和 ShowDialog方法

ShowDialog方法,该方法的作用是显示通用对话框,其一般调用形式如下:

通用对话框对象名.ShowDialog();

通用对话框运行时,如果单击对话框中的【确定】按钮,则返回值为 DialogResult.OK;否则返回值为DialogResult.Cancel。其他对话框控件均具有ShowDialog方法,以后不再重复介绍。

SaveFileDialog 控件

SaveFileDialog 控件又称保存文件对话框,主要用来弹出 Windows 中标准的【保存文件】对话框。该控件
在工具箱中的图标为 。
SaveFileDialog 控件也具有 FileName、Filter、FilterIndex、InitialDirectory、Title 等属性,这些属性的作用
与 OpenFileDialog对话框控件基本一致,此处不再赘述。
需注意的是:上述两个对话框只返回要打开或保存的文件名,并没有真正提供打开或保存文件的功能,程
序员必须自己编写文件打开或保存程序,才能真正实现文件的打开和保存功能。

FontDialog 控件

FontDialog控件又称字体对话框,主要用来弹出Windows中标准的【字体】对话框。该控件在工具箱中的
图标为 。字体对话框的作用是显示当前安装在系统中的字体列表,供用户进行选择。下面
介绍字体对话框的主要属性。
(1)Font属性:该属性是字体对话框的最重要属性,通过它可以设定或获取字体信息。
(2)Color属性:用来设定或获取字符的颜色。
(3)MaxSize属性:用来获取或设置用户可选择的最大磅值。
(4)MinSize属性:用来获取或设置用户可选择的最小磅值。192VisualC#.NET应用教程
(5)ShowColor属性:用来获取或设置一个值,该值指示对话框是否显示颜色选择框。如果对话框显示颜
色选择框,属性值为true,反之,属性值为false。默认值为false。
(6)ShowEffects 属性:用来获取或设置一个值,该值指示对话框是否包含允许用户指定删除线、下划线
和文本颜色选项的控件。如果对话框包含设置删除线、下划线和文本颜色选项的控件,属性值为 true,反
之,属性值为false。默认值为true。

ColorDialog控件

ColorDialog 控件又称颜色对话框,主要用来弹出 Windows 中标准的【颜色】对话框。该控件在工具箱中
的图标为 。颜色对话框的作用是供用户选择一种颜色,并用 Color 属性记录用户选择- 18 -
的颜色值。下面介绍颜色对话框的主要属性。
(1)AllowFullOpen属性:用来获取或设置一个值,该值指示用户是否可以使用该对话框定义自定义颜色。
如果允许用户自定义颜色,属性值为true,否则属性值为false。默认值为true。
(2)FullOpen 属性:用来获取或设置一个值,该值指示用于创建自定义颜色的控件在对话框打开时是否
可见。值为true时可见,值为 false时不可见。
(3)AnyColor 属性:用来获取或设置一个值,该值指示对话框是否显示基本颜色集中可用的所有颜色。
值为 true时,显示所有颜色,否则不显示所有颜色。
(4)Color属性:用来获取或设置用户选定的颜色。

PrintDialog控件和 PrintDocument 控件

使用PrintDialog控件可以显示Windows标准的【打印】对话框,在该对话框中用户可以选择打印机、选择要打印的页及页码范围等。需要注意的是:该对话框并不负责具体的打印任务,要想在应用程序中控制打印内容必须使用 PrintDocument 控件。关于这两个控件的详细使用方法读者可参阅相关资料或VisualC#的帮助文件。

用户自定义对话框

除了可以使用Windows自带的标准对话框外,用户还可以把自己设计的窗体定义成对话框。使用自定义对
话框有以下几个要点。
(1)将窗体的FormBorderStyle属性值设置为FixedDialog。
(2)根据需要向窗体上添加控件。
(3)使用窗体的ShowDialog方法显示窗体,即显示出对话框。

菜单控件

Windows 的菜单系统是图形用户界面(GUI)的重要组成之一,在 VisualC#中使用 MainMenu 控件可以很
方便地实现Windows的菜单,MainMenu控件在工具箱中的图标为 。
1.菜单的结构
图 10-9和图10-10 是典型的菜单结构。其中有文字的单个命令称菜单项,顶层菜单项是横着排列的,单击
某个菜单项后弹出的称为菜单或子菜单,它们均包含若干个菜单项,菜单项其实是 MenuItem 类的一个对
象。菜单项有的是变灰显示的,表示该菜单项当前是被禁止使用的。有的菜单项的提示文字中有带下划线
的字母,该字母称为热键(或访问键),若是顶层菜单,可通过按“ALT+热键”打开该菜单,若是某个子
菜单中的一个选项,则在打开子菜单后直接按热键就会执行相应的菜单命令。有的菜单项后面有一个按键
或组合键,称快捷键,在不打开菜单的情况下按快捷键,将执行相应的命令。在图 10-9 中,【保存文件】
菜单项是加粗显示的,该菜单项称为默认项。图10-9的【另存为】和【退出】之间有一个灰色的线条,该
线条称为分隔线或分隔符。在图 10-10 中菜单项【白色背景】前面有一个“√”号,称为选中标记,菜单
项加上选中标记表示该菜单项代表的功能当前正在起作用。
2.菜单项的常用属性
(1)Text 属性:用来获取或设置一个值,通过该值指示菜单项标题。当使用 Text 属性为菜单项指定标题
时,还可以在字符前加一个“&”号来指定热键(访问键,即加下划线的字母)。例如,若要将“File”中
的“F”指定为访问键,应将菜单项的标题指定为“&File” 。
(2)Checked属性:用来获取或设置一个值,通过该值指示选中标记是否出现在菜单项文本的旁边。如果
要放置选中标记在菜单项文本的旁边,属性值为true,否则属性值为false。默认值为false。
(3)DefaultItem 属性:用来获取或设置一个值,通过该值指示菜单项是否为默认菜单项。值为 true 时,
是默认菜单项,值为 false时,不是默认菜单项。菜单的默认菜单项以粗体的形式显示。当用户双击包含默
认项的子菜单后,默认项被选定,然后子菜单关闭。
(4)Enabled属性:用来获取或设置一个值,通过该值指示菜单项是否可用。值为true时表示可用,值为
false表示当前禁止使用。
(5)RadioCheck 属性:用来获取或设置一个值,通过该值指示选中的菜单项的左边是显示单选按钮还是
选中标记。值为true时将显示单选按钮标记,值为false时显示选中标记。
(6)Shortcut属性:用来获取或设置一个值,该值指示与菜单项相关联的快捷键。
(7)ShowShortcut 属性:用来获取或设置一个值,该值指示与菜单项关联的快捷键是否在菜单项标题的
旁边显示。如果快捷组合键在菜单项标题的旁边显示,该属性值为 true,如果不显示快捷键,该属性值为
false。默认值为true。
(8)MdiList属性:用来获取或设置一个值,通过该值指示是否用在关联窗体内显示的多文档界面(MDI)
子窗口列表来填充菜单项。若要在该菜单项中显示MDI子窗口列表,则设置该属性值为true,否则设置该
属性的值为false。默认值为false。
3.菜单项的常用事件
菜单项的常用事件主要有Click事件,该事件在用户单击菜单项时发生。

多窗体程序设计

Windows应用程序很少只由一个窗体组成, 一般情况下一个应用程序均拥有很多个窗体。 C#项目刚建立时只有一个名为Form1的窗体,要建立多窗体应用程序应首先为项目添加窗体,添加窗体的方法如下。
(1) 单击工具栏上的按钮 或执行【项目】→【添加Windows窗体】命令,
将会出现如图 10-17 所示的【添加新项】对话框。
(2) 在该对话框的【模板】下面的列表框中 选中【Windows 窗体】图标,在【名称】文本框中输入窗体名,然后单击【打开】按钮,即为应用程序添加了一个窗体。

MDI 应用程序设计

1.MDI应用程序的概念
在前面的章节中,所创建的都是单文档界面(SDI)应用程序。这样的程序(如记事本和画图程序)仅支
持一次打开一个窗口或文档。如果需要编辑多个文档,必须创建SDI应用程序的多个实例。而使用多文档
界面(MDI)程序(如Word和AdobePhotoshop)时,用户可以同时编辑多个文档。MDI程序中的应用程
序窗口称为父窗口,应用程序内部的窗口称为子窗口。虽
然 MDI应用程序可以具有多个子窗口, 但是每个子窗口却
只能有一个父窗口。此外,处于活动状态的子窗口最大数
目是 1。子窗口本身不能再成为父窗口,而且不能移动到
它们的父窗口区域之外。除此以外,子窗口的行为与任何
其他窗口一样(如可以关闭、最小化和调整大小等)。一个
子窗口在功能上可能与父窗口的其他子窗口不同,例如,
一个子窗口可能用于编辑图像,另一个子窗口可能用于编
辑文本,第 3 个子窗口可以使用图形来显示数据,但是所
有的窗口都属于相同的MDI父窗口。图 10-19 是一个典型
的 MDI应用程序。外面的窗口是应用程序窗口,里面的两
个小窗口是 MDI子窗口。
2.与 MDI应用程序设计有关的属性、方法和事件
常用的MDI父窗体属性如下。
(1)ActiveMdiChild属性:该属性用来表示当前活动的MDI子窗口,如果当前没有子窗口,则返回null。
(2)IsMdiContainer属性:该属性用来获取或设置一个值,该值指示窗体是否为多文档界面(MDI)子窗
体的容器,即MDI父窗体。值为true时,表示是父窗体,值为false时,表示不是父窗体。
(3)MdiChildren属性:该属性以窗体数组形式返回MDI子窗体,每个数组元素对应一个 MDI子窗体。
常用的MDI子窗体的属性有:
(1)IsMdiChild属性:该属性用来获取一个值,该值指示该窗体是否为多文档界面(MDI)的子窗体。值
为 true时,表示是子窗体,值为false时,表示不是子窗体。
(2)MdiParent属性:该属性用来指定该子窗体的MDI父窗体。与MDI应用程序设计有关的方法中,一
般只使用父窗体的LayoutMdi方法,该方法的调用格式如下:
MDI父窗体名.LayoutMdi(Value);
该方法用来在MDI父窗体中排列MDI子窗体,以便导航和操作MDI子窗体。参数Value决定排列方式,
取值有:MdiLayout.ArrangeIcons(所有 MDI 子窗体以图标的形式排列在 MDI 父窗体的工作区内)、
MdiLayout.TileHorizontal (所有MDI子窗口均水平平铺在MDI父窗体的工作区内)、 MdiLayout.TileVertical
(所有 MDI 子窗口均垂直平铺在 MDI 父窗体的工作区内)和 MdiLayout.Cascade(所有 MDI 子窗口均层
叠在 MDI 父窗体的工作区内)。常用的 MDI 父窗体的事件是 MdiChildActivate,当激活或关闭一个 MDI
子窗体时将发生该事件。
3.菜单合并
父窗体和子窗体可以使用不同的菜单,这些菜单会在选择子窗体的时候合并。如果需要指定菜单的合并方
式,程序员可以设置每个菜单项的MergeOrder属性和MergeType属性。
(1)MergeOrder属性:用来确定当两个菜单合并时菜单项出现的顺序,具有较低
MergeOrder的菜单项会首先出现。
(2)MergeType属性:当合并的两个菜单的某些菜单项的MergeOrder属性值相等时,
使用该属性可以控制这些菜单项的显示方式。其取值及含义如表10-4所示。

键盘事件处理

键盘事件在用户按下键盘上的键时发生,可分为两类。第一类是KeyPress事件,当按下的键表示的是一个
ASCII 字符时就会触发这类事件,可通过它的 KeyPressEventArgs 类型参数的属性 KeyChar 来确定按下键
的 ASCII 码。使用 KeyPress 事件无法判断是否按下了修改键(例如 Shift,Alt 和 Ctrl 键),为了判断这些
动作, 就要处理KeyUp 或KeyDown事件, 这些事件组成了第二类键盘事件。 该类事件有一个KeyEventArgs
类型的参数,通过该参数可以测试是否按下了一些修改键、功能键等特殊按键信息。
1.KeyPressEventArgs类的主要属性(KeyPress事件的一个参数类型)
(1)Handled属性:用来获取或设置一个值,该值指示是否处理过KeyPress事件。
(2)KeyChar属性:用来获取按下的键对应的字符,通常是该键的ASCII码。
2.KeyEventArgs类的主要属性(KeyUp和 KeyDown事件的一个参数)
(1)Alt属性:用来获取一个值,该值指示是否曾按下Alt键。
(2)Control属性:用来获取一个值,该值指示是否曾按下Ctrl键。
(3)Shift属性:用来获取一个值,该值指示是否曾按下Shift键。
(4)Handled属性:用来获取或设置一个值,该值指示是否处理过此事件。
(5)KeyCode属性:以 Keys枚举型值返回键盘键的键码,该属性不包含修改键(Alt、Control和 Shift键)
信息,用于测试指定的键盘键。
(6)KeyData 属性:以 Keys 枚举类型值返回键盘键的键码,并包含修改键信息,用于判断关于按下键盘
键的所有信息。
(7)KeyValue属性:以整数形式返回键码,而不是Keys枚举类型值。用于获得所按下键盘键的数字表示。
(8)Modifiers 属性:以 Keys 枚举类型值返回所有按下的修改键(Alt、Control 和 Shift 键),仅用于判断
修改键信息。

鼠标事件处理

对鼠标操作的处理是应用程序的重要功能之一,在VisualC#中有一些与鼠标操作相关的事件,利用它们可
以方便地进行与鼠标有关的编程。
(1)MouseEnter事件:在鼠标指针进入控件时发生。
(2)MouseMove事件:在鼠标指针移到控件上时发生。事件处理程序接收一个MouseEventArgs类型的参
数,该参数包含与此事件相关的数据。该参数的主要属性及其含义如下。
Button属性:用来获取曾按下的是哪个鼠标按钮。该属性是MouseButtons枚举型的值,
取值及含义如下:Left(按下鼠标左按钮)、Middle(按下鼠标中按钮)、Right(鼠标右按钮)、None(没
有按下鼠标按钮)、 XButton1 (按下了第一个XButton按钮, 仅用于Microsoft智能鼠标浏览器) 和XButton2
(按下了第二个XButton按钮,仅用于 Microsoft智能鼠标浏览器)
Clicks属性:用来获取按下并释放鼠标按钮的次数。
Delta属性:用来获取鼠标轮已转动的制动器数的有符号计数。制动器是鼠标轮的一个凹口。
X 属性:用来获取鼠标所在位置的x坐标。
Y 属性:用来获取鼠标所在位置的y坐标。
(3)MouseHover事件:当鼠标指针悬停在控件上时将发生该事件。
(4)MouseDown事件:当鼠标指针位于控件上并按下鼠标键时将发生该事件。事件处理程序也接收一个
MouseEventArgs类型的参数。
(5)MouseWheel事件:在移动鼠标轮并且控件有焦点时将发生该事件。该事件的事件处理程序接收一个
MouseEventArgs类型的参数
(6)MouseUp 事件:当鼠标指针在控件上并释放鼠标键时将发生该事件。事件处理程序也接收一个
MouseEventArgs类型的参数。
(7)MouseLeave事件:在鼠标指针离开控件时将发生该事件。

控件与组件的区别

组件是指可重复使用并且可以和其他对象进行交互的对象。组件(component)是靠类实现的。控件是能够提供用户界面接口(UI)功能的组件。换句话说就是,控件是具有用户界面功能的组件。

3、建立控件之间的关联

1)先拖几个控件进来,其中我们右击选择【属性】,点击属性上面的“小闪点”,打开【事件】。
2)选择Click事件,双击,进入“代码界面”
找到Click的函数,如:

 private void textBox1_Click(object sender, EventArgs e){}

3)建立联系。

  private TextBox _textBox2;//声明属性,用处:点击不同按钮,在外部一个文本框,要显示内容,那外部的text从哪里来呢,指向外部的text,后期用于显示文本内容的文本框public TextBox MyTextBox2 { get => _textBox2; set => _textBox2 = value; }private void radioButton1_Click(object sender, EventArgs e){MyTextBox2.Text = radioButton1.Text;}


4)注意,我们可以用panel,来使得几个控件成为整体。
5)新建项目。
注意:是新建项目,而不是新建项。
选择:winform窗体控件库。(注意,是库)
6)根据自己的用途拖入控件,建立联系。
7)选择【生成】|【解决方案】。
注意:我们要生成的是dll文件,不是exe。
8)查看工具箱,是否出现我们已经创建的控件
9)在窗体应用中运行自己创建的控件。
注意:此时我们可能需要在Form1_Load函数中对某些数据进行初始化。

private void Form1_Load(object sender, EventArgs e){userControl11.MyTextBox = textBox1;}//使得我们自己写的空间和textbox产生联系//usercontrol11是什么呢?//最简单的winform控件的创建、使用//尝试做一个winform控件,再加载,再处理响应

原因是在Form1.cs下,Form1.Designer.cs中,打开windows窗体设计器生成的代码中将该数据设置为了NULL.

4、尝试自己制作控件

我尝试根据此原理,创建了“祝福”控件,机理与上述一致;
唯一不太一样是:在第二个控件的click中选择直接输出一段字符串。

 private TextBox _textBox2;//声明属性,用处:点击不同按钮,在外部一个文本框,要显示内容,那外部的text从哪里来呢,指向外部的text,后期用于显示文本内容的文本框public TextBox MyTextBox2 { get => _textBox2; set => _textBox2 = value; }private void radioButton1_CheckedChanged(object sender, EventArgs e){}private void radioButton1_Click(object sender, EventArgs e){MyTextBox2.Text = radioButton1.Text;}private void radioButton2_Click(object sender, EventArgs e){MyTextBox2.Text = "happy mary";}

5、将自己的控件在其他项目中引用(非拖动,代码写入)

1)新建一个窗体应用程序
2)添加引用,加入我们创建好的dll文件。
3)在From1.cs中引用进来我们自己的库

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;
using button;//引用我们自己的库

4)此时,我们会发现,工具箱中没有我们自己创建的控件,需要写代码去创建出来
5)双击空白处,显示代码
6)找到Form1_Load函数;

private void Form1_Load(object sender, EventArgs e)//窗口执行显示的时候,就会激发,运行{Label Ib = new Label();Ib.Location = new Point(100, 200);Ib.Text = "I am a label named Ib";this.Controls.Add(Ib);UserControl1 userCtrl = new UserControl1();//new出来userCtrl.Location = new  Point(0, 0);      //基础类库提供的点对象//location类型是点,所以用点去制定userCtrl.Size = new Size(300, 200);//宽度300,高度200userCtrl.MyLable = Ib;this.Controls.Add(userCtrl);//不是拖进来的控件,而是自己用代码创建出来的}

①我们通过

UserControl1 userCtrl = new UserControl1();

new出我们需要的对象
②通过Location确定位置,由于Location是点类,所以我们用new一个点类来确定位置。

userCtrl.Location = new  Point(0, 0);


用size,设置控件的大小

 userCtrl.Size = new Size(300, 200);//宽度300,高度200


我们需要给控件的MyLable赋值,

userCtrl.MyLable = Ib;

所以,我们在new userCtrl 之前,需要先创建Lable。

            Label Ib = new Label();Ib.Location = new Point(100, 200);Ib.Text = "I am a label named Ib";this.Controls.Add(Ib);

this.Controls.Add(Ib);//向本窗体添加 Ib 控件

点类的应用

https://blog.csdn.net/weixin_34410564/article/details/112880680

Size的应用:

https://blog.csdn.net/hongkaihua1987/article/details/7905700?lcationNum=15


6、显示磁盘文件夹

①使用OpenFileDialog打开磁盘文件夹窗口
②使用过滤函数,注意过滤函数使用的规则。成对出现,后面的才是真正需要过滤的。
③dlg.ShowDialog();只有加上这一句话,才可以显示在窗体上面
④利用If函数判断是否文件名为空。

private void button3_Click(object sender, EventArgs e){//在磁盘文件夹下去找图,则需要打开磁盘文件夹的窗口:OpenFileDialog dlg = new OpenFileDialog();//打开文件的窗口类//窗口,类型过滤,设置一个属性,一个过滤属性dlg.Filter = "jpg file|*.jpg";//需要一个字符串//规则,成对出现,真正过滤在后面dlg.ShowDialog();//需要加上,上面一句话,才会显示//选择的文件,需要一个字符串 ,去存放string filename = dlg.FileName;if (filename != ""){this.PicBox.Load(filename);}}}

7、磁盘文件夹与显示图片的pictureBox建立联系

①先创建PictureBox

  private PictureBox _picBox;public PictureBox PicBox { get => _picBox; set => _picBox = value; }

②利用把文件名赋给Picture.Load的方式建立关联

 this.PicBox.Load(filename);

③添加“窗体应用”。
在form1.cs中添加

 private void Form1_Load(object sender, EventArgs e){userControl11.MyLable = label1;userControl11.PicBox = pictureBox1;}

进行初始化,避免因为NULL报错。

8、设置图片显示时的“拉伸”

三、遇到的报错与解决方式

1)自己创建的控件,在工具箱中不显示。

https://www.cnblogs.com/daoge/p/4505660.html

产生原因:部分VS在安装过程中自动添加控件设置为了不允许,手动允许即可
2)" System.NullReferenceException"类型的未经处理的异常该怎么办?

对象没创建,代码中使用了null的对象,排查出错处所使用的对象。

解决方法:在Form1_Load中初始化。

3)生成解决方案时候,生成的是exe文件不是.dll文件。

首先要注意到是,我们解决此类问题需要先将VS全屏,以免属性常规设置中显示不全

解决方案 :
【项目】,【属性】,选择输出设置为“类”。

值得注意的是,我们在运行窗体应用程序时候,不能设置输出为类,而是windows应用程序,否则报错。


4)
有人可能会自己修改项目自带的东西,导致出错。
5)有人可能会在Form1_Load初始化时候,没有创建text等控件,或者把创建好的控件名称写错。

基于C#的GIS开发20210426之类库同名类、制作winform控件、建立控件之间的关联、自己制作控件、自己控件引入项目、显示磁盘文件夹、磁盘文件与picturebox建立关系、图像拉伸相关推荐

  1. 地图——基于python的gis开发与应用

    新冠病毒疫情地图.GIS和Qt平台 这是沁园春里最难的.最核心的部分.没有地图,GIS是玩不转的.没有基石,如何能建起高楼?地图就是gis的基石.我的论文要义是基于python做gis,所以pytho ...

  2. 基于C#的GIS开发20210422之C#知识点总结、数组、数据类型、字符串总结、函数重载、字段与属性的区分、构造函数的应用、属性设置、普通类与抽象类、面向对象关系梳理

    在20210419的基础上进行改进,和学习. 20210422笔记 ①C#小知识点总结 一.C#中的数组定义 0)数组声明 1)一维数组: 2)二维数组 3)数组初始化 4)数组的访问 C# 中 fo ...

  3. 从事GIS开发多年,2017年对GIS行业的心得,尤其对三维GIS的理解

    个人群号 309141738 本人从事GIS方面开发六年了,但是一开始大学并未学的是GIS方面的专业,本人学习的专业叫对日软件开发,呵呵...很新颖的一个名字把,没错,本来想着毕业后去日本从事软件开发 ...

  4. 从事GIS开发多年,2017年对GIS行业的心得,尤其对三维GIS的理解 1

    个人群号 309141738             开源GIS群 455073433 本人从事GIS方面开发六年了,但是一开始大学并未学的是GIS方面的专业,本人学习的专业叫对日软件开发,呵呵... ...

  5. GIS开发中的区域定位功能实现

    开发工具与关键技术: SuperMap iDesktop 9D GIS 作者:杨泽平 撰写时间:2020.4.20 SuperMap GIS的二次开发,这是基于SuperMap iDesktop 根据 ...

  6. 基于Chrome的扩展开发(二)

    Chrome启动时默认的效果如下图所示,有"most visited","Searches","Recent bookmarks",&quo ...

  7. 软考高级系统架构设计师系列论文三十六:论基于构件的软件开发

    软考高级系统架构设计师系列论文三十六:论基于构件的软件开发 一.摘要 二.正文 三.总结 一.摘要 本文以我主持的某商业银行交易监控分析系统项目为实例,探讨了作为开发方公司基于构件技术开发项目碰到的问 ...

  8. 基于TerraDeveloper的三维GIS开发研究

    [中文题名]  基于TerraDeveloper的三维GIS开发研究 [英文题名]  Research on the Development of 3D GIS Based on TerraDevel ...

  9. 基于Visual Graph快速开发出电力系统

    一.如何快速拥有自主知识产权的高品质的电力系统 每一个与电力相关的公司都想拥有自主知识产权的电力系统产品,让公司的价值能得到快速的提升,让公司在同行的竞争力大幅度提高,让公司的产品技术水平迅速达到同行 ...

最新文章

  1. Scala样例类及密封类
  2. Object_id用法
  3. docker与mmdetection
  4. 【做题记录】 [HEOI2013]SAO
  5. C++ 高级数据类型(三)—— 指针
  6. java 内存 四_java最终化的内存保留问题(4)
  7. JQuery Datatables 动态配置参数异步加载数据
  8. ImageIO 框架详细解析
  9. 计算机专业开题报告指导老师意见评语,开题报告指导教师评语
  10. mysql 主从 锁库_mysql 5.7.21 主从集群恢复GTID方式(不锁库)
  11. 百度拥抱年轻人,53 岁张亚勤成退休第一人!
  12. strace ltrace使用
  13. 重置单例对象Singleton Swift
  14. C++ priority_queue
  15. 【播放器】git上著名播放器
  16. window电脑H265(HEVC)编码的mp4不显示缩略图解决办法
  17. 8款流行前沿的HTML5文本编辑器
  18. Nginx系列一:Nginx介绍与Nginx工作原理分析
  19. h265硬解码和软解码
  20. QTextBrowser显示html文件内容

热门文章

  1. 展现图表的50种JavaScript库
  2. 操作Perl数组: shift, unshift, push, pop
  3. 计算机桌面关不了机,电脑关不了机是怎么回事
  4. 亲测可用 Ubuntu域名解析暂时失败 + 网络不可达
  5. 虚幻引擎图文笔记:设置游戏的输入控制
  6. 市人社局:2月9日前在家上班算休息日上班,要支付两倍工资
  7. 商品标签,人群标签,手淘免费流量获得,人群打标
  8. 自动化工具 WEB 自动化工具
  9. C语言程序设计:找素数
  10. MSSQL数据库超时的原因与解决方法