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. 基于UGUI的框架

    这个框架简单易懂,上手就可以直接拿来用,主要是单例管理类,界面和界面之间的互相交流通过单例去实现,个人感觉不是很好,但是我特别喜欢他的管理层级非常分明. 之后会发一个广播机制,结合上这套UI框架,但是 ...

  2. 学习笔记15_ASP母版页

    *网页母版页设计通用样式#header:{height:100px;width:1000px}#leftDiv:{float:left;width:200px}#mainDiv:{margin-lef ...

  3. [考试反思]1027csp-s模拟测试90:自我

    其实这套题很好. 但是这次,在T1爆炸的同时,T2和T3并没有出现能弥补的表现. 在AK仍然存在的同时,我居然连一个AC都没有. 所以最后就是一无是处的一场. 考试结束前估分:100+100+30=2 ...

  4. [考试反思]0828NOIP模拟测试32:沉底

    ,,190,180,170,170... 倒数第6,75. 啊...再这么下去要失去理想了... 开学翘课停课以来的第一场考试,就考成这鬼模样. 本来还可以凭借那几次高分苟在公共卷总分的第2,这一场直 ...

  5. CSPS模拟 73

    被T3坑了 忘记考虑$atan$只会返回正数导致无法区分方向相反模长相等的两个向量 直接把向量拆成ab两个上三角函数干出来就对了 真的exhausted

  6. Python文件打包exe教程——Pyinstaller(亲测有效)

    今天将要解决一个问题,如何打包Pyhon文件 众所周知,Python文件的后缀名为“.py” 所以执行Python文件的要求之一便是具有python环境. 偶尔特殊情况,或者运行一些比较简单的工具,但 ...

  7. vue学习笔记(五)条件渲染和列表渲染

    前言 在众多的编程语言中,我们的基础语法总是少不了一些专业语法,比如像定义变量,条件语句,for循环,数组,函数等等,vue.js这个优秀的前端框架中也有同样的语法,我们换一个名词,将条件语句改成专业 ...

  8. 在VMware15.5中安装CentOS7_7_64bit

    一.创建虚拟机 在我的另一个随笔里有. 地址为:https://www.cnblogs.com/qi-yuan/p/11692092.html 只是在虚拟机安装操作系统时候选择 Linux 而不是 W ...

  9. Easy 2048 Again(状压dp)

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3802 题意: 从数列A中, 删除若干个数(可以0个), 是删除 ...

  10. 记录工作遇到的死锁问题(Lock wait timeout exceeded; try restarting transaction)

    1.问题背景 刚来新公司不久,对业务还不太熟悉,所以领导先安排我维护原有系统.大概介绍下项目背景,项目分为核心业务部分在项目A中,与第三方交互的业务在项目B中,前端发起请求调用A项目接口,并在A项目中 ...