目录

  • 一 关闭最小化
  • 二 退出程序接口
  • 三 最小化或关闭时隐藏到系统托盘
    • 1 添加托盘图标控件NotifyIcon
    • 2 添加(重写)窗口尺寸变动函数Form1_Resize
    • 3 添加(重写)关闭窗口事件
    • 4 添加双击托盘图标事件(双击显示窗口)
    • 5 添加托盘图标的右键菜单
  • 四 子窗口最大最小按钮
  • 五 DataGridView
    • 1 点击事件
    • 2 自动宽度
    • 3 不显示第一列
  • 六 C# TreeView 右键菜单
  • 七 c# winform窗体如何设置才可以不能随意拖动大小
  • 八 滚动条查看PictureBox的大图片
  • 九 DockPanel
    • 1 不显示关闭按钮
    • 2 不可浮动
    • 3 判断Dockpanel中存在多少个子窗体或Contents
    • 4 子窗体布局
    • 5 示例
  • 十 父子窗口传值
  • 十一 子窗口间传值
  • 十二 Log4net
  • 十三 页面继承
    • 1 winform 窗体继承后无法编辑
    • 2 继承窗体 无法拖动修改控件大小
  • 十四 类调用主窗体控件
  • 十五 用户控件属性集合定义

一 关闭最小化

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{if (e.CloseReason == CloseReason.UserClosing){e.Cancel = true;this.WindowState = FormWindowState.Minimized;}
}

二 退出程序接口

System.Environment.Exit(0);

三 最小化或关闭时隐藏到系统托盘

1 添加托盘图标控件NotifyIcon

  直接从工具箱中拖动添加即可。

2 添加(重写)窗口尺寸变动函数Form1_Resize

private void Form1_Resize(object sender, EventArgs e)
{if (this.WindowState == FormWindowState.Minimized)    //最小化到系统托盘{NotifyIcon1.Visible = true;    //显示托盘图标this.Hide();    //隐藏窗口}
}

3 添加(重写)关闭窗口事件

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{//注意判断关闭事件Reason来源于窗体按钮,否则用菜单退出时无法退出!if (e.CloseReason == CloseReason.UserClosing){e.Cancel = true; //取消"关闭窗口"事件this.WindowState = FormWindowState.Minimized;//使关闭时窗口向右下角缩小的效果NotifyIcon1.Visible = true;this.Hide();return;}
}

4 添加双击托盘图标事件(双击显示窗口)

private void NotifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{NotifyIcon1.Visible = false;this.Show();WindowState = FormWindowState.Normal;this.Focus();
}

  PS:解决了设置“关闭时隐藏到系统托盘”时,点击“退出”菜单也无法退出的问题。——无论是用 this.Close(); 还是 Application.Exit(); 都无法退出!——解决办法是,在关闭窗口事件中判断关闭原因/来源 (e.CloseReason),若为 CloseReason.UserClosing 则为点击了窗口右上角的关闭按钮,否则可能是点击了"退出"菜单,则不执行隐藏到托盘的程序。(详见STEP3的if判断)

5 添加托盘图标的右键菜单

本节内容。

(具体代码略)
"退出"菜单:Application.Exit();
"显示窗口"菜单:参考STEP4

四 子窗口最大最小按钮

  窗体的 FormBorderStyle 设置为 sizable 才会出现最大/小化按钮。

五 DataGridView

1 点击事件

  DataGridView点击事件并不总是触发,使用 CellClick事件而不是 CellContentClick ,因为当单击任何 部分时触发该事件(不只是它里面的内容)。

2 自动宽度

1、AllCells 调整列宽,以适合该列中的所有单元格的内容,包括标题单元格。
2、AllCellsExceptHeader 调整列宽,以适合该列中的所有单元格的内容,不包括标题单元格。
3、ColumnHeader 调整列宽,以适合列标题单元格的内容。
4、DisplayedCells 调整列宽,以适合当前屏幕上显示的行的列中的所有单元格的内容,包括标题单元格。
5、DisplayedCellsExceptHeader 调整列宽,以适合当前屏幕上显示的行的列中的所有单元格的内容,不包括标题单元格。
6、Fill 调整列宽,使所有列的宽度正好填充控件的显示区域,只需要水平滚动保证列宽在DataGridViewColumn.MinimumWidth 属性值以上。相对列宽由相对 DataGridViewColumn.FillWeight 属性值决定。
7、None 列宽不会自动调整。
8、NotSet 列的大小调整行为从 DataGridView.AutoSizeColumnsMode 属性继承。

  整体自动宽度:Autosizecolumnsmode = file;,特定列固定宽度:AutoSizeMode = None

3 不显示第一列

RowHeadersVisible = false

六 C# TreeView 右键菜单

  方法一:
  在winform中,添加一个contextMenuStrip1,设置TreeView的属性ContextMenuStrip为contextMenuStrip1,并为这个contextMenuStrip1添加几个菜单项,点击每个菜单项,实现其click事件,然后添加treeivew的nodemouseclick事件,类似如下代码:

//右键菜单
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{if (e.Button != MouseButtons.Right) return;if (e.Node.Parent == null || e.Node == null) return;treeView1.SelectedNode = e.Node;contextMenuStrip1.Show(tv_Roots, e.X, e.Y);
}
void contextMenuStripItem_Click(object sender, EventArgs e)//编辑飞行段
{}

  方法二:不同节点对应不同的右键菜单

private void tvOneRoot_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{if (e.Button != MouseButtons.Right) return;if (e.Node == null) return; //无节点if (e.Node.Level == 0) return;int nodeType = GetNodeTypeByGuid(e.Node.Name);tvOneRoot.SelectedNode = e.Node;InitcmsOneRout(nodeType);cmsOneRout.Show(tvOneRoot, e.X, e.Y);
}/// <summary>
/// 初始化cmsOneRoot 从nodetype
/// </summary>
/// <param name="nodetype"></param>
private void InitcmsOneRout(int nodetype)
{cmsOneRout = new ContextMenuStrip();if (nodetype == -1){ToolStripMenuItem tmiEditRoutStation = new ToolStripMenuItem("编辑飞行站点");tmiEditRoutStation.Click += new EventHandler(tmiEditRoutStation_Click);cmsOneRout.Items.Add(tmiEditRoutStation);ToolStripMenuItem tmiMoveRouteStation = new ToolStripMenuItem("更改位置");tmiMoveRouteStation.Click += new EventHandler(tmiMoveRouteStation_Click);cmsOneRout.Items.Add(tmiMoveRouteStation);ToolStripMenuItem tmiDeleRouteStation = new ToolStripMenuItem("删除飞行站点");tmiDeleRouteStation.Click += new EventHandler(tmiDeleRouteStation_Click);cmsOneRout.Items.Add(tmiDeleRouteStation);}else if (nodetype == 0){ToolStripMenuItem tmiEditRout = new ToolStripMenuItem("编辑飞行段属性");tmiEditRout.Click += new EventHandler(tmiEditRout_Click);cmsOneRout.Items.Add(tmiEditRout);ToolStripMenuItem tmiDeleteRout = new ToolStripMenuItem("删除飞行段");tmiDeleteRout.Click += new EventHandler(tmiDeleteRout_Click);cmsOneRout.Items.Add(tmiDeleteRout);}else if (nodetype == 1){}else if (nodetype == 2){}else{}
}
void tmiEditRout_Click(object sender, EventArgs e)//编辑飞行段
{string routId = tvOneRoot.SelectedNode.Name;RouteParameter rp = GetRouteParaByGuid(routId);FrmPointProperty frm = new FrmPointProperty(rp, 0, 1);frm.OnRoutInfoUpdated += new FrmPointProperty.DelegateRouteInfoUpdated(frm_OnRoutInfoUpdated);frm.ShowDialog();
}

七 c# winform窗体如何设置才可以不能随意拖动大小

https://www.cnblogs.com/janghe/p/7843677.html

八 滚动条查看PictureBox的大图片

  PictureBox自身没有滚动条,看不到大图片,而Panel自带滚动条,可以用Panel给PictureBox加上滚动条,设置Panel属性AutoScroll为true,设置PictureBox属性SizeMode为AutoSize,这样就可以用滚动条来看PictureBox中的大图片。

九 DockPanel

1 不显示关闭按钮

示例:

imageShow = ImageShow.GetInstance();
imageShow.Show(this.dockPanel1);
imageShow.CloseButton = false;
imageShow.CloseButtonVisible = false;

2 不可浮动

  拖动:如果你想使你的子窗体可以任意拖动,那么你在设置子窗体的DockAreas属性时,保持默认值,不要修改;
  固定:只需设置你窗体的DockAreas为Document就行了。

3 判断Dockpanel中存在多少个子窗体或Contents

foreach (DockContent frm in this.dockPanel1.Contents)
{//这样设置后,所有的继承与DockContent的窗体都会被计算在内的
}

4 子窗体布局

  在用DockPanel做MDI程序时,子窗体的初始化布局的实现,比如停靠左边,“日”字型的,有两种方法:

Me.DockPanel1.DockLeftPortion = 0.15'停靠区域占窗口比例

方法1:

frm1.show(DockPanel1, WeifenLuo.WinFormsUI.Docking.DockState.DockTop)
frm1.Show(DockPanel1, WeifenLuo.WinFormsUI.Docking.DockState.DockLeft)
frm1.DockAreas = WeifenLuo.WinFormsUI.Docking.DockAreas.DockLeftfrm2.Show(DockPanel1, WeifenLuo.WinFormsUI.Docking.DockState.DockBottom)
frm2.Show(DockPanel1, WeifenLuo.WinFormsUI.Docking.DockState.DockLeft)
frm2.DockAreas = WeifenLuo.WinFormsUI.Docking.DockAreas.DockLeft

方法2:

frm1.Show(DockPanel1, WeifenLuo.WinFormsUI.Docking.DockState.DockLeft)
frm1.DockAreas = WeifenLuo.WinFormsUI.Docking.DockAreas.DockLeftfrm2.Show(frm1.Pane, WeifenLuo.WinFormsUI.Docking.DockAlignment.Bottom, 0.618)
frm2.DockAreas = WeifenLuo.WinFormsUI.Docking.DockAreas.DockLeft

  相对于方法1,方法2可以设置两个子窗口的高度比例,更好用些。

5 示例

  C# 开源控件DockPanel 使用心得:https://blog.csdn.net/gd6321374/article/details/78059501
  C#实现浮动和多标签窗体解决方案—使用Dockpanel:https://blog.csdn.net/zhangyuehua123/article/details/6861401

十 父子窗口传值

  Winform中如何实现父窗体传递数据到子窗体并刷新子窗体:https://www.cnblogs.com/qufly/p/3433195.html

十一 子窗口间传值

https://www.cnblogs.com/wuhuacong/archive/2012/07/06/2578198.html

十二 Log4net

  AssemblyInfo.cs:

using System.Resources;    # line 1[assembly: NeutralResourcesLanguage("zh-Hans")]    # line 38
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

  App.config:

<configSections><section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /><!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --><section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections><!--log4net配置start-->
<log4net><logger name="Log"><level value="INFO" /><param name="Encoding" value="utf-8" /><appender-ref ref="RollingLog" /></logger><logger name="Err"><level value="ERROR" /><appender-ref ref="RollingErr" /></logger><appender name="RollingLog" type="log4net.Appender.RollingFileAppender"><file value="Log\" /><appendToFile value="true" /><rollingStyle value="Date" /><datePattern value="yyyyMMdd'.txt'" /><!--不加utf-8编码格式,中文字符将显示成乱码--><param name="Encoding" value="utf-8" /><staticLogFileName value="false" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="记录时间:%d 线程ID:[%thread]- 操作信息:%m%n" /></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="INFO" /><param name="LevelMax" value="INFO" /></filter></appender><appender name="RollingErr" type="log4net.Appender.RollingFileAppender"><file value="Err\" /><param name="Encoding" value="utf-8" /><appendToFile value="true" /><rollingStyle value="Date" /><datePattern value="yyyyMMdd'.txt'" /><!--不加utf-8编码格式,中文字符将显示成乱码--><param name="Encoding" value="utf-8" /><staticLogFileName value="false" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="记录时间:%d 线程ID:[%thread]- 错误描述:%m%n" /></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="ERROR" /><param name="LevelMax" value="ERROR" /></filter></appender>
</log4net>
<!--log4net配置end-->

  LogHelp.cs:

using log4net;
using System.Diagnostics;
using System.Reflection;namespace Log_Helper
{public class LogHelp{private static readonly ILog logInfo = LogManager.GetLogger("Log");private static readonly ILog logErr = LogManager.GetLogger("Err");/// <summary>/// 记录正常的消息/// </summary>/// <param name="msg">消息内容</param>public static void info(string msg){logInfo.Info(msg);}/// <summary>/// 记录异常信息/// </summary>/// <param name="msg">异常信息内容</param>public static void error(string msg){StackTrace stackTrace = new StackTrace();StackFrame stackFrame = stackTrace.GetFrame(1);MethodBase methodBase = stackFrame.GetMethod();logErr.Error("类名:" + methodBase.ReflectedType.Name + " 方法名:" + methodBase.Name + " 信息:" + msg);}}
}

log4net.config

<?xml version="1.0" encoding="utf-8" ?>
<log4net><!--根配置--><root><!--日志级别:可选值: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF--><!--OFF: 0--><!--FATAL: FATAL--><!--ERROR: ERROR、FATAL--><!--WARN: WARN、ERROR、FATAL--><!--INFO: INFO、WARN、ERROR、FATAL--><!--DEBUG: DEBUG、INFO、WARN、ERROR、FATAL--><!--ALL: DEBUG、INFO、WARN、ERROR、FATAL--><level value="DEBUG"/><appender-ref ref="ErrorLog" /><appender-ref ref="WarnLog" /><appender-ref ref="InfoLog" /><appender-ref ref="DebugLog" /></root><!-- 错误 Error.log--><appender name="ErrorLog" type="log4net.Appender.RollingFileAppender"><!--目录路径,可以是相对路径或绝对路径--><param name="File" value="./logs/error/"/><param name="Encoding" value="utf-8" /><!--文件名,按日期生成文件夹--><param name="DatePattern" value="yyyyMMdd'.txt'"/><!--追加到文件--><appendToFile value="true"/><!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--><rollingStyle value="Composite"/><!--写到一个文件--><staticLogFileName value="false"/><!--单个文件大小。单位:KB|MB|GB--><maximumFileSize value="900MB"/><!--最多保留的文件数,设为"-1"则不限--><maxSizeRollBackups value="15"/><!--日志格式--><layout type="log4net.Layout.PatternLayout"><conversionPattern value="[%d{HH:mm:ss}][%thread][%logger] - %m%n"/></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="ERROR" /><param name="LevelMax" value="ERROR" /></filter></appender><!-- 警告 Warn.log--><appender name="WarnLog" type="log4net.Appender.RollingFileAppender"><!--目录路径,可以是相对路径或绝对路径--><param name="File" value="./logs/warn/"/><!--文件名,按日期生成文件夹--><param name="DatePattern" value="yyyyMMdd'.txt'"/><param name="Encoding" value="utf-8" /><!--追加到文件--><appendToFile value="true"/><!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--><rollingStyle value="Composite"/><!--写到一个文件--><staticLogFileName value="false"/><!--单个文件大小。单位:KB|MB|GB--><maximumFileSize value="900MB"/><!--最多保留的文件数,设为"-1"则不限--><maxSizeRollBackups value="15"/><!--日志格式--><layout type="log4net.Layout.PatternLayout"><conversionPattern value="[%d{HH:mm:ss}][%thread][%logger] - %m%n"/></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="WARN" /><param name="LevelMax" value="WARN" /></filter></appender><!-- 信息 Info.log--><appender name="InfoLog" type="log4net.Appender.RollingFileAppender"><!--目录路径,可以是相对路径或绝对路径--><param name="File" value="./logs/info/"/><!--文件名,按日期生成文件夹--><param name="DatePattern" value="yyyyMMdd'.txt'"/><param name="Encoding" value="utf-8" /><!--追加到文件--><appendToFile value="true"/><!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--><rollingStyle value="Composite"/><!--写到一个文件--><staticLogFileName value="false"/><!--单个文件大小。单位:KB|MB|GB--><maximumFileSize value="900MB"/><!--最多保留的文件数,设为"-1"则不限--><maxSizeRollBackups value="15"/><!--日志格式--><layout type="log4net.Layout.PatternLayout"><conversionPattern value="[%d{HH:mm:ss}][%thread][%logger] - %m%n"/></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="INFO" /><param name="LevelMax" value="INFO" /></filter></appender><!-- 调试 Debug.log--><appender name="DebugLog" type="log4net.Appender.RollingFileAppender"><!--目录路径,可以是相对路径或绝对路径--><param name="File" value="./logs/debug/"/><!--文件名,按日期生成文件夹--><param name="DatePattern" value="yyyyMMdd'.txt'"/><param name="Encoding" value="utf-8" /><!--追加到文件--><appendToFile value="true"/><!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--><rollingStyle value="Composite"/><!--写到一个文件--><staticLogFileName value="false"/><!--单个文件大小。单位:KB|MB|GB--><maximumFileSize value="900MB"/><!--最多保留的文件数,设为"-1"则不限--><maxSizeRollBackups value="15"/><!--日志格式--><layout type="log4net.Layout.PatternLayout"><conversionPattern value="[%d{HH:mm:ss}][%thread][%logger] - %m%n"/></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="DEBUG" /><param name="LevelMax" value="DEBUG" /></filter></appender>
</log4net>

十三 页面继承

1 winform 窗体继承后无法编辑

  并非所有控件都支持从基本窗体进行可视化继承。以下控件不支持本演练中描述的场景: WebBrowser、ToolStrip、ToolStripPanel、TableLayoutPanel、FlowLayoutPanel、DataGridView 。继承窗体中的这些控件是无论您使用何种修饰符(私有(private)、 protected 或公共(public)),始终为只读。

2 继承窗体 无法拖动修改控件大小

  问题描述:一个窗体集成父窗体,发现无法直接拖动修改的控件,比如修改大小等。
  特征:
  不禁使父窗体控件,就算新加一个控件也会这样:鼠标放到控件移动手方块上会出现一个“继承的控件”的tooptip,
  异常
  正常情况

  原因:
  父窗体设置了WindowState属性为:System.Windows.Forms.FormWindowState.Maximized
  在父窗体的designer.cs中有这么一句话:this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
  解决办法:
  一、去掉这句话;
  二、放在窗体构造函数中,在这句话前面加上判断,如果VS处于设计模式,就返回;

public frmBaseChild()
{InitializeComponent();if (CheckDesingModel.IsDesingMode) return;//如果处于设计模式,返回this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
}

CheckDesingModel类:

internal class CheckDesingModel
{public static bool IsDesingMode{get{bool ReturnFlag = false;if (LicenseManager.UsageMode == LicenseUsageMode.Designtime)ReturnFlag = true;else if (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv")ReturnFlag = true;//if (ReturnFlag)// Msg.Warning("设计模式");//else Msg.Warning("非设计模式!");return ReturnFlag;}}
}

十四 类调用主窗体控件

  在Form1类下定义静态变量,构造方法中引用这个Form1

class Form1: Form
{public static Form1 form1;public Form1(){InitializeComponent();form1 = this;}public void Method(){}
}

  调用该窗体的控件或方法

Form1.form1.Button;
Form1.form1.Method();

十五 用户控件属性集合定义

  上面已经说过使用属性集合,是因为自定义的控件中有多相同的对象需要在调用时进行设置。(当然你要说是为了把多个属性放在一起好找也不是不行)
  下面用两个例子来说明
  例1:控件中用到多个图形对象(前景、背景、标志…)
  1、创建一个类用来封装调用控件后添加图片对象时需要设置的属性

public class BsItem : Component
{private Image _imageItem;[Description("选中图片"), Category("外观")]public Image SelectImage { get { return _imageItem; } }private string _ImageName;[Description("图片路径"), Category("外观")]public string ImageName{get { return _ImageName; }set{_ImageName = value;this._imageItem = Image.FromFile(_ImageName);_ImageName = System.IO.Path.GetFileName(_ImageName);Name = _ImageName;}}
}

  2、定义一个图片集合

private List<BsItem> items = new List<BsItem>();[TypeConverter(typeof(System.ComponentModel.CollectionConverter))]//指定编辑器特性
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]//设定序列化特性
[Category("外观"), Description("图像文件集")]
public List<BsItem> ImageList
{get { return items; }
}[Browsable(false)]//不显示Name 属性
public string Name { get; set; }

  调用时的效果图

  例2:控件中用到多个自定义变量,需要在调用时设置:数据来源、不同状态下显示的内容等属性
  属性中包含了BOOL,string,图形,枚举,自定义等多种数据类型
  方法与例1相同,这些属性的具体使用代码不赘述,只要在{ get; set; }中编写就OK了

private List<DataAttribute> mDataAttribute = new List<DataAttribute>();[TypeConverter(typeof(System.ComponentModel.CollectionConverter))]//指定类型装换器
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Category("外观"), Description("图像文件集")]
public List<DataAttribute> MDataAttribut
{get { return mDataAttribute; }set { mDataAttribute = value; }
}
public class DataAttribute
{[Description("变量名称"), Browsable(true)]public string VariableName { get; set; }[Description("允许读取变量值"), Browsable(true)]public bool ReadEnabled { get; set; }[Description("变量存储区"), Browsable(true)]public catalogOne CatalogOneName { get; set; }[Description("全局数据块号,DB1对应用户程序的最小全局DB块"), Browsable(true)]public catalogTwo CatalogTwoName { get; set; }[Description("变量为1时显示的图片"), Browsable(true)]public Image TrueImage { get; set; }[Description("变量为0时显示的图片"), Browsable(true)]public Image FalseImaRge { get; set; }[Description("变量未加载时显示的图片"), Browsable(true)]public Image NotImage { get; set; }
}

  效果图

WinForm常用控件相关推荐

  1. DevExpress Winform 常用控件

    前言 DevExpress 控件的功能比较强大,是全球知名控件开发公司,对于开发 B/S 或 C/S 都非常出色,可以实现很炫且功能强大的效果. DevExpress Winform 常用控件是本人在 ...

  2. winform常用控件介绍

    winform常用控件介绍 1.窗体 1 2.Label 控件 3 3.TextBox 控件 4 4.RichTextBox控件 5 5.NumericUpDown 控件 7 6.Button 控件 ...

  3. C# Winform 常用控件介绍

    1.窗体 1.常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体. (2) WindowState属性: 用来获取或设置窗体的窗口状态. 取值有三种: N ...

  4. Windows Phone开发(11):常用控件(下)

    原文:Windows Phone开发(11):常用控件(下) WP控件大部分都可以从Silverlight中继承过来,这里我也只能拿一部分作演示,对于其它控件如何使用,可以参考SDK相关说明以及Sil ...

  5. c winform 打印 html,C# Winform 打印控件PrintDocument

    由于本着节约的原则,这里的打印都只是保存为.oxps格式的文件. 在我调试时每次打印完成后,窗体都会自己闪退. 在网上并没有相关资料,经过加入断点确认问题在 private void btnPrint ...

  6. winformbutton边框怎么改_C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法

    C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法 1.新建组件这里可以自定义一个Panel控件起名为PanelEx 2.增加一个BoderColor属性和BoderSize属性 pr ...

  7. Winform分页控件之纯分页显示处理

    在之前介绍的Winform分页控件中,都以分页控件+显示表格控件作为一个整体性的控件,不可分开,这样做的目的是可以实现更多的操作,集成更多丰富的特性,减少我们开发的工作量,这种情况虽然适用于大多数的情 ...

  8. VB调用C#写的WinForm.NET控件

    点击下载本文配套的演示程序代码http://files.cnblogs.com/xdesigner/VB-CS-WinformControl.zip. 一.前言: 虽然IT开发技术日新月异,不过业界仍 ...

  9. winform/timer控件/权限设置/三级联动

    winform/timer控件/权限设置/三级联动 一.timer控件 组件--timer timer是一个线程,默认可以跨线程访问对象 属性:Enabled--可用性 Interval--间隔时间 ...

最新文章

  1. linux 临时设置英文输入,Linux 设置 Rime 默认英文状态
  2. 已经感冒好长一段时间了 不过今天我的新blog开张
  3. qt 将不同的数据类型组成一个新类型_SQL 通用数据类型
  4. go 切片slice删除元素的方法
  5. java-appium-527进阶-1 UiAutomator12区别和封装
  6. 【数据库系统】文件处理系统和DBMS的主要区别
  7. 开始投靠C#,入门版(一)
  8. Python 抛异常处理(精)
  9. Java后端学习体系(韩顺平)
  10. 【转】串口通讯—通信协议
  11. api php jwt,Laravel使用JWT实现API用户授权的详细步骤
  12. 回购价低于股价怎么办?
  13. android中finish和system.exit方法退出的区别
  14. eclipse中利用hibernate插件,根据数据库表反向生成Javabean
  15. Pytorch 1.1.0驾到!小升级大变动,易用性更强,支持自定义RNN
  16. 服务器更新升级BIOS操作步骤
  17. window 软件 C盘 文件 搬家(配置文件搬家)
  18. PHP字符串函数ucfirst( 将字符串的首字母转换为大写)
  19. win10热点手机显示IP配置错误连不上和电脑连上网线没网络
  20. 检索策略(抓取策略)

热门文章

  1. 插入u盘计算机未响应,U盘插入win7电脑没反应如何解决 Win7插入U盘没反应怎么办...
  2. Echarts世界地图汉化及其数据包
  3. 提升深度学习模型的表现,你需要这20个技巧
  4. Deepin Linux系统安装及显示器配置教程(可竖屏)
  5. html网页设置音频,HTML教程 - 插入声音和音乐到HTML页面里
  6. java基于springboot+vue+elementui的实验室预约管理系统 前后端分离
  7. 一点资讯推出“长风计划”
  8. 触控板的使用技巧~赞,亲测好用,放弃鼠标,拒绝鼠标手、腱鞘炎!!
  9. List 常用的 Lambda 操作
  10. 伴随着Web标准发展