namespace firstly    #当前命名空间控件
{
public partial class Form1 : Form
{
public Form1() #第一个窗体
{
InitializeComponent();
}
}
}

winform 代码结构

1.常用控件的认识

修改winform 应用程序的入口点

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
//程序位于 Program.cs
namespace firstly
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//决定那个窗体先被执行
Application.Run(new Form22()); // Application.Run(new Form1());
}
}
}

修改程序入口点

可以通过修改  Form1.Designer.cs 来实现 对控件进行修改   (一般 图形进行控制)

button1.Enabled = false;  是指不可用

Application.Exit();  关闭总窗体

Form.Close();    关闭当前的窗体

(1).基本控件

1.Label   标签

功能 :显示窗体文本

常用属性和方法 事件  :Text

Hide  即是Visible 属性设置为True   控件也不可见

Show  相当于Visible属性设置为True

Click: 单击控件

eg:

在一个界面 ,在此打开一个新的窗体,(当前窗体隐藏)

           //当前界面隐藏
linkLabel1.LinkVisited = true; //确认可以被访问
Form2 f = new Form2();
f1.Show();
this.Hide(); // 当前隐藏

实例化一个新的窗体

2.TextBox 文本框的控件和 Button 按钮

功能  接受或显示用户文本信息

常用属性和方法 事件  :

MaxLength    文本框输入最大字符

Multiline     是否可以在文本框输入多行

Passwordchar    密码输入框

Readonly   文本框中的字体为可读

Text  检索在控件输入的文本

Clear  删除现有的所有文本

Show 相当于Visible属性设置为True

KeyPress   用户按一个键结束时将发生该事件

Botton控件

Enabled 是否启用

PerFormClick  Button中Click时间

Click    点击触发的

eg 用户登录

 private void button2_Click(object sender, EventArgs e)   //取消
{
clear(); //调用自己构造的方法 } private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == string.Empty || textBox2.Text == string.Empty)
{
MessageBox.Show("信息禁止为空!","登录提示");
clear();
return;
}
if (!textBox1.Text.Equals("admin") || !textBox2.Text.Equals("admin")) # 输入比对
{
MessageBox.Show("用户名称或密码为空!", "登录提示");
clear();
return;
}
else
{
MessageBox.Show("欢迎您登录本系统!","消息提示");
clear();
}
}
//由于每次都调用 所以生成一个方法 更有效率
public void clear()
{
textBox1.Clear();
textBox2.Clear();
textBox2.Focus();
}

用户登录

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms; namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private bool ISLOGIN = false;
//就加在其构造函数的前面。这东西我们等下要用。
//然后加一个属性,该属性用来判别是否登录
public bool isLogin
{
get
{
return this.ISLOGIN;
}
}
private void Form1_Load(object sender, EventArgs e)
{ } private void button1_Click(object sender, EventArgs e)
{
if (this.textBox1.Text == "qq" && this.textBox2.Text == "qq")
{
this.ISLOGIN = true;
//frmEditor f2 = new frmEditor();
//f2.ShowDialog();
this.Close();//登陆成功才关闭登陆登陆窗体
}
else
{
MessageBox.Show("非法用户名或密码,请再重试一次!");
}
}
}
}

登录成功后才会关闭

Form1.MaximizeBox=false   窗体不允许最大化

text1.PasswordChar='*';

3.ListBox 列表框 控件

功能显示多行文本信息 , 提供用户选择

常用属性和方法 事件  :

Items  :  列表框的具体内容

SelectionMode    列表框类型   单选 ,多选, 不可选择

SelectedIndex   指定选中行索引,默认第一行为0

SelectedItem 被选择的文本内容

SelectedItems ListBox的选择列表集合

Text   默认文本内容

ClearSelected 清除当前选择

SelectedIndexChanged  一旦改变就触发

eg。部门显示

private void Form1_Load(object sender, EventArgs e)   //窗体加载
{
this.listBox1.Items.Add("软件部");
this.listBox1.Items.Add("硬件部");
this.listBox1.Items.Add("财务部");
this.listBox1.Items.Add("人事部");
}
//当选中后会触发的事件
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
MessageBox.Show("您选择的部门是:"+listBox1.SelectedItem.ToString()+",位列第"+listBox1.SelectedIndex.ToString(),"信息提示");
}

listBox 练习

 private void button1_Click_1(object sender, EventArgs e)
{
textBox1.Enabled = true;
textBox2.Enabled = true;
comboBox1.Enabled = true;
listBox1.Enabled = true;
textBox1.Focus();
} private void button2_Click(object sender, EventArgs e)
{
textBox1.Text = "";
textBox2.Text = "";
listBox1.SelectedIndex = ;
comboBox1.SelectedIndex = ;
textBox1.Focus();
} private void button3_Click(object sender, EventArgs e)
{
string str = "";
for (int ctr = ; ctr <= this.listBox1.SelectedItems.Count - ; ctr++)
{
str += "\n" + this.listBox1.SelectedItems[ctr].ToString();
}
//注意:此处需要将listBox1的selectionmodel设置为MultiExtended才会有效果。
MessageBox.Show("选定的项目是:\n" + str, "信息提示", MessageBoxButtons.OK);
Application.Exit();
} private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string str = this.comboBox1.SelectedItem.ToString();
MessageBox.Show("您选择的职务是:\n" + str, "信息提示", MessageBoxButtons.OK);
}

插入方法的实践操作

4.ComboBox

功能 限制用户 在多个固定信息选择 唯一一个行

常用属性和方法 事件  :

DropDownStyle  :  ComboBox 控件的样式  有三种 simple 只读 显示所有 DropDown(可以读写) DropDownList(只读)

MaxDropDownItems 下拉区显示最大项目数

Select 选择指定范围的文本

 private void Form1_Load(object sender, EventArgs e)
{
this.comboBox1.Items.Add("财务部");
this.comboBox1.Items.Add("产品部");
this.comboBox1.Items.Add("销售部");
this.comboBox1.Items.Add("生产部");
//默认的选择是"产品部"
this.comboBox1.SelectedIndex = ; this.comboBox2.Items.Add("财务部");
this.comboBox2.Items.Add("产品部");
this.comboBox2.Items.Add("销售部");
this.comboBox2.Items.Add("生产部");
//默认的选择是"产品部"
this.comboBox2.SelectedIndex = ; this.comboBox3.Items.Add("财务部");
this.comboBox3.Items.Add("产品部");
this.comboBox3.Items.Add("销售部");
this.comboBox3.Items.Add("生产部");
//默认的选择是"产品部"
this.comboBox3.SelectedIndex = ;
} private void com_selectIndexChanged_1(){
String mess=comboBox1.SelectedItem.ToString();
TextBox1.text=mess; }

comboBox练习

5.对话框窗口(非模式窗体)

重载方法

Show(string text);

Show(string text, string caption);

Show(string text, string caption, MessageBoxButtons buttons);

Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon);     指定文本/标题/按钮/图标的消息框

 private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("嘿,这是简单提示!","信息提示");
} private void button2_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("嘿,这是问询提示!","问询提示",MessageBoxButtons.YesNo);
if (result == DialogResult.Yes)
{
label1.Text = "您选择了YES"; }
else
{
label1.Text = "您选择了NO";
}
} private void button3_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("嘿,这是带有图标的问询提示!", "问询提示", MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question,MessageBoxDefaultButton.Button3,MessageBoxOptions.RightAlign);
if (result == DialogResult.Yes)
{
label1.Text = "您选择了图标YES"; }
else if(result==DialogResult.Cancel)
{
label1.Text = "您选择了图标取消";
}
else if (result == DialogResult.No)
{
label1.Text = "您选择了图标NO";
}
}

提示框演示

补充  showDialog

路径绑定show   不可以自由切换   就是指在用户没有关闭当前页的前提下,无法关闭该页面后任一页面

要等待当前窗体关闭后才能操作其他窗体,

eg

 private void button2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
this.Visible = false;
f2.ShowDialog();
this.Visible = true;
}

ShowDialog 演示

 private void button1_Click_1(object sender, EventArgs e)
{
textBox1.Enabled = true;
textBox2.Enabled = true;
comboBox1.Enabled = true;
listBox1.Enabled = true;
textBox1.Focus();
} private void button2_Click(object sender, EventArgs e)
{
textBox1.Text = "";
textBox2.Text = "";
listBox1.SelectedIndex = ;
comboBox1.SelectedIndex = ;
textBox1.Focus();
} private void button3_Click(object sender, EventArgs e)
{
string str = "";
for (int ctr = ; ctr <= this.listBox1.SelectedItems.Count - ; ctr++)
{
str += "\n" + this.listBox1.SelectedItems[ctr].ToString();
}
//注意:此处需要将listBox1的selectionmodel设置为MultiExtended才会有效果。
MessageBox.Show("选定的项目是:\n" + str, "信息提示", MessageBoxButtons.OK);
Application.Exit();
} private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string str = this.comboBox1.SelectedItem.ToString();
MessageBox.Show("您选择的职务是:\n" + str, "信息提示", MessageBoxButtons.OK);
}

MessBox 加强演示

2.多文档处理界面

SDI 单文档窗口

MDI 多文档窗口

设置MDI  *****在窗体 属性IsMdiContainer 属性设置为True

MDI 属性

StartPosition    初始窗口位置

CancelButton 按下esc键后执行那个按钮。

ControlBox    确定系统是否有图标和最大最小关闭按钮。

FormBorderStyle  指定边框和标题栏的外观和行为。

HelpButton    确定窗体的标题栏上是否有帮助按钮。

KeyPreview    确定窗体键盘事件是否已经向窗体注册。

MainMenuStrip      确定键盘激活和多文档合并。

ShowInTaskbar     确定窗体是否出现在任务栏中。

WindowState        确定窗体的初始可视状态。

方法

Activate     当窗体被激活时候发生

MdiChildActivate     当MDI子窗体被激活时候发生

事件

Activated    窗体在激活时发生

Closed   已经关闭

Closing 正在关闭

Load

为MDI 配置   MainMenu菜单   工具栏中默认是没有的,打开工具箱 界面,右键 选择项命令

并在扩展的选择工具箱项窗口 寻找 Mainmenu 控件

父窗体设置

IsMdiContainer 属性设置为True

触发方法:

this.LayoutMdi(Mdilayout.Cascade) ;

Form2 f2 = new Form2();

指定父窗体
f2.MdiParent = this;
f2.Show();

在此可以在一个界面 内打开一个子窗体

窗体的层叠

TileHorizontal   水平

TileVertical   垂直

小技巧:

*****窗体之间传值

实现界面

窗体2

窗体3 接受到

 ============form2的设计=====================
private void Form2_Load(object sender, EventArgs e)
{
comboBox1.SelectedIndex = ;
textBox3.Text = "";
textBox1.Focus();
} public void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "" || textBox2.Text == "" || comboBox1.Text == "")
{
MessageBox.Show("姓名,或者邮件,或者提交,信息禁止为空!", "信息提示");
}
else
{
this.Hide();
Form3 childform3 = new Form3(this.textBox1.Text,this.textBox2.Text,this.comboBox1.SelectedItem.ToString(),this.textBox3.Text);
childform3.Show();
}
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
} ================form3的设计====================
对于form3窗体而言,在系统初始事件填写如下代码:
public partial class Form3 : Form
{
private string _name;
private string _emailId;
private string _subject;
private string _feedBack; public Form3(string varName, string varEmail, string varSubject, string varFeedBack)
{
InitializeComponent();
// 在 private 变量中存储值
this._name = varName;
this._emailId = varEmail;
this._subject = varSubject;
this._feedBack = varFeedBack;
// 在列表框中放置值
listBox1.Items.Add("姓名:" + this._name);
listBox1.Items.Add("邮件地址:" + this._emailId);
listBox1.Items.Add("信息主题:" + this._subject);
listBox1.Items.Add("反馈意见:" + this._feedBack);
} private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("感谢您输入的反馈!");
this.Close();
}
}

代码

上例子中固然很好 ,但是 2个窗体在转换过程中没有收到MDI 的控制

 ============form2的设计=====================
private void Form2_Load(object sender, EventArgs e)
{
comboBox1.SelectedIndex = ;
textBox3.Text = "";
textBox1.Focus();
} public void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "" || textBox2.Text == "" || comboBox1.Text == "")
{
MessageBox.Show("姓名,或者邮件,或者提交,信息禁止为空!", "信息提示");
}
else
{
this.Hide();
Form3 childform3 = new Form3(this.textBox1.Text,this.textBox2.Text,this.comboBox1.SelectedItem.ToString(),this.textBox3.Text);
//加的这一句
childform3.MdiParent = this; childform3.Show();
}
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
} ================form3的设计
在 中加入返回按钮事件 =================== Form2 f2 = new Form2();
f2.MdiParent = this.MdiParent;
f2.Show();
this.close();

改进过后的代码

技巧2 放回重复打开窗口

在打开的同时进行判断

 建议写成一个方法 
直接检测是否已经打开此MDI窗体  
// 是否已经打开了?(用循环来判断) 
 foreach (Form childrenForm in this.MdiChildren)  {
  //检测是不是当前子窗体名称  
if (childrenForm.Name == "子窗体名称")
 {  //是的话就是把他显示
  childrenForm.Visible = true;
  //并激活该窗体
 childrenForm.Activate();
  return;
 }
 }
 //下面是打开子窗体
  Form1 childrenForm = new Form1();
  childrenForm.MdiParent = this;
  childrenForm.Show();
 }

判断是否重复打开

技巧3 通过类属性进行数据传值(方法一)

 、先在Form2中定义一个成员变量和一个属性如下:
private string form2zhi = null;
public string Form2ChuanZhi
{ get
{ return form2zhi; }
}
、再在Form3中定义一个成员变量和一个属性如下:
private string form3zhi = null;
public string Form3ChuanZhi
{ set { form3zhi = value;
}
get
{ return form3zhi;
}
} 、双击btn_ChuanZhi在这个事件中写入以下代码(主要是显示Form3窗体和将Form2中的值传过去):
Form3 form3 = new Form3();
form3.Form3ChuanZhi = form2zhi;
//将值传过去
form3.Show(); 另一个版本
private string some_name;
public string SomeName {
get {
return some_name;
}
set {
some_name = value;
}
}
private void button2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
this.Visible = false;
f2.ShowDialog();
this.Visible = true;
}
private void menuItem3_Click(object sender, EventArgs e)
{
if (TextBox1.text1 == "" || TextBox2.Text == "") {
MessageBox.Show("no blank");
}else{
this.Hide();
Form2 fm=new Form2();
fm.SomeName=text1Box1.Text;
fm.MdiParent=this.MdiParent;
fm.Show();
}
private void Form1_Load(object sender, EventArgs e)
{
listBox1.Items.Add(SomeName);
}

实训:

 Form 

 ————————————————————
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms; using System.Collections;
//注意:必须调用该命名空间,否则无法建立ArrayList对象。
namespace WindowsApplication1
{
public partial class Form4 : Form
{
//Form4窗体的私有变量listData1,用来保存listBox1下拉列表中的数据
private ArrayList listData1;
//Form4窗体的公共属性。该属性可以被外部所访问,访问的内容就是Form4窗体的私有变量listData1的内容。
//这里我们采用属性,感觉语法更灵活,清楚。
public ArrayList ListData2
{
get { return this.listData1; }
} //配置Form4构造函数,目的是填充listBox1中的具体数据内容
public Form4()
{
InitializeComponent();
this.listData1 = new ArrayList();
this.listData1.Add("DotNet");
this.listData1.Add("C#");
this.listData1.Add("Asp.net");
this.listData1.Add("WebService");
this.listData1.Add("XML");
this.listBox1.DataSource = this.listData1;
} private void button1_Click(object sender, EventArgs e)
{
Form5 formChild = new Form5();//实例化另外一个窗体Form5
formChild.Owner = this;
//我们设置了formChild.Owner为this,这样,子窗体和主窗体就有联系了,
formChild.ShowDialog();//打开子窗体
//当然上面两句也可以该成为:formChild.ShowDialog(this);
this.listBox1.DataSource = null;
this.listBox1.DataSource = this.listData1;
this.Hide();
this.Close();
}
}
} ————————————Form using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections; namespace WindowsApplication1
{
public partial class Form5 : Form
{
private ArrayList listData3;
//建立私有变量,该变量用以接收复窗体的共有属性数据
public Form5()
{
InitializeComponent();
//千万别放到构造函数里面,因为在主窗体修改按钮被点击后,开始执行Form5 formChild = new Form5();
//而在Form2的实例化过程中会在构造函数中执行Form4 pareForm = (Form4)this.Owner;而这时的this.Owner是没有值的,为空引用,
} private void Form5_Load(object sender, EventArgs e)
{
Form4 pareForm = (Form4)this.Owner;//实例化父窗体,建立父子窗体之间联系
this.listData3 = pareForm.ListData2;//访问父窗体的公有属性给当前子窗体的私有变量
foreach (object o in this.listData3)//遍历后将数据显示在listBox1之中
{
this.listBox1.Items.Add(o);
}
} private void button1_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}

两个界面之间传值

3 菜单和菜单组件

分类   菜单栏 主菜单和子菜单

MenuStrip

方法

text   文件(&N) 会产生 文件(N)   运行时Alt+N 执行

ShortcutKeys  自定义快捷键组合 ,注:至少选择一项修饰符  Alt ,shift,ctrl

Separator 分割线

美化: *.skn   *.ssk

第三方动态链接库

c# 窗体开发1 基本控件的使用的更多相关文章

  1. WinForm界面开发之布局控件"WeifenLuo.WinFormsUI.Docking"的使用

    WinForm界面开发之布局控件"WeifenLuo.WinFormsUI.Docking"的使用 转自:http://www.cnblogs.com/wuhuacong/arch ...

  2. c# 窗体开发2 高级控件的使用

    1.单选按钮(RadioButton) 同一组中其他单选按钮不能同时选定 分组形式:panel GoupBox 窗体 方法: 属性 说明 Appearance RadioButton 控件的显示与命令 ...

  3. Android开发之日历控件实现

    Android开发之日历控件实现:以下都是转载的. 日历控件 日历控件 日历控件 日历控件

  4. 关于WinForm引用WPF窗体---在Winform窗体中使用WPF控件

    项目中有个界面展示用WPF实现起来比较简单,并且能提供更酷炫的效果,但是在WinForm中使用WPF窗体出现了问题,在网上找了一下有些人说Winform不能引用WPF的窗体,我就很纳闷,Win32都能 ...

  5. WinForm 鼠标进入移开窗体事件,因子控件导致的误触发

    /// <summary> /// 重写OnControlAdded方法,为每个子控件添加MouseLeave事件 /// </summary> /// <param n ...

  6. (转)C# WinForm中 获得当前鼠标所在控件 或 将窗体中鼠标所在控件名显示在窗体标题上

    原文地址:http://www.cnblogs.com/08shiyan/archive/2011/04/14/2015758.html /********************** * 课题:将窗 ...

  7. Qt 开发 MS VC 控件终极篇

    Qt 开发 MS VC 控件终极篇 1. 使用 MSVC2015 通过项目向导创建 Qt ActiveQt Server 解决方案 项目配置:以下文件需要修改 1. 项目属性页->项目属性-&g ...

  8. Android开发:文本控件详解——TextView(一)基本属性

    一.简单实例: 新建的Android项目初始自带的Hello World!其实就是一个TextView. 在activity_main.xml中可以新建TextView,从左侧组件里拖拽到右侧预览界面 ...

  9. C# activex开发中 axwebbrowser控件及 IE浏览器设置

    <object type='application/x-vlc-plugin' id='vlc' events='True' codebase='../cab/axvlc.cab' classi ...

随机推荐

  1. Vue学习笔记(五)——配置开发环境及初建项目

    前言 在上一篇中,我们通过初步的认识,简单了解 Vue 生命周期的八个阶段,以及可以应用在之后的开发中,针对不同的阶段的钩子采取不同的操作,更好的实现我们的业务代码,处理更加复杂的业务逻辑. 而在这一 ...

  2. 使用Typescript重构axios(一)——写在最前面

    0.系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三)- ...

  3. CDQ分治(学习笔记)

    离线算法——CDQ分治 CDQ (SHY)显然是一个人的名字,陈丹琪(MM)(NOI2008金牌女选手). 从归并开始(这里并没有从逆序对开始,是想直接引入分治思想,而不是引入处理对象) 一个很简单的 ...

  4. 用python实现对元素的长截图

    一.目标 浏览网页的时候,看见哪个元素,就能截取哪个元素当图片,不管那个元素有多长 二.所用工具和第三方库 python ,PIL,selenium pycharm 三.代码部分 长截图整体思路: 1 ...

  5. PHP对象继承

    PHP对象继承<?php class foo{ public function printItem($string) { echo 'Foo: ' . $string . PHP_EOL; } ...

  6. jquery jssdk分享报错解决方法

    jssdk分享报错解决方法 一般都是参数传错了

  7. DNS服务反向解析及过程中一些小问题解决

    在此需要了解一下,反向解析的作用是根据IP地址查找到对应的主机名(域名),在区域文件(named.rfc1912.zones)中默认已存在一些注释内容与区域信息,可不需要删除上面实验及默认区域信息,直 ...

  8. Comet OJ - 2019国庆欢乐赛 C题 两排房子

    ###题目链接### 题目大意:这里有横着的两排房子,给你每个房子的左端点和右端点.若两排房子中分别有两个房子 x y ,他们在横坐标上有重叠部分(端点重叠也算),则被称为 “对门” 关系. 问你总共 ...

  9. [LC]876题 Middle of the Linked List (链表的中间结点)(链表)

    ①中文题目 给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式 ...

  10. mongodb基本命令,mongodb集群原理分析

    mongodb基本命令,mongodb集群原理分析 集合: 1.集合没有固定数据格式. 2. 数据: 时间类型: Date() 当前时间(js时间) new Date() 格林尼治时间(object) ...