C#-WPF初学
1.新建一个WPF的应用;
2.拖拽控件并布局好:
【小技巧】选中控件,点击”回形针“即可让该控件跟随窗口自动调整大小;
3.编写代码:
主程序代码如下:
namespace WpfApp1
{
delegate void ShowMsgDelegate(ref TextBox textbox1, string msg);//定义委托类型
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
ShowMsgDelegate showMsgDelegate = null;//定义委托变量
public MainWindow()
{
InitializeComponent();
TextBox1.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
this.MyButton1.Click += ButtonClicked;//button1是手动代码挂接事件,Button2是IDE双击自动挂接,效果相同 showMsgDelegate += ShowMsg;//关联委托
} LogSave logSave1 = new LogSave();
private void ButtonClicked(object sender, RoutedEventArgs e)
{
if (sender == this.MyButton1)
{
string msg1 = $"{MyButton1.Name}按钮被按下"+"\r\n";
this.MyTextBox.Text = msg1;
logSave1.AddMsg(msg1);
showMsgDelegate.Invoke(ref TextBox1, msg1);
}
else if (sender == this.MyButton2)
{
string msg1 = $"{MyButton2.Name}按钮被按下" + "\r\n";
this.MyTextBox.Text = msg1;
logSave1.AddMsg(msg1);
showMsgDelegate.Invoke(ref TextBox1, msg1);
}
else if (sender == this.MyButton3)
{
TextBox1.Clear();
}
}
public void ShowMsg(ref TextBox textbox1, string msg)
{
string timestring = DateTime.Now.ToString();
msg = timestring + "|" + msg;
textbox1.Text=textbox1.Text.Insert(0, msg);
} }
}
log记录的代码:
namespace WpfApp1
{
class LogSave
{
FileStream LogFile;
string str_date; //log文件日期
List<string> str_list = new List<string>();
public void AddMsg(string MsgStr)
{
byte[] byData; if (LogFile == null || 0 != string.Compare(str_date, DateTime.Now.ToString("yyyy-MM-dd")))
{
String str;
str = Path.GetFullPath("..") + "\\log\\";
if (!Directory.Exists(str))
{
//文件夹不存在则创建
Directory.CreateDirectory(str);
}
try
{
if (LogFile != null)
{
LogFile.Close();
LogFile = null;
}
str += DateTime.Now.ToString("yyyy-MM-dd") + ".log";
if (!File.Exists(str))
{
LogFile = new FileStream(str, FileMode.Create);
}
else
{
LogFile = new FileStream(str, FileMode.Open); }
str_date = DateTime.Now.ToString("yyyy-MM-dd");
}
catch (Exception)
{
return;
}
}
if (LogFile != null)
{
string StrTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
MsgStr = $"<{StrTime}>>{MsgStr}\n";//加入log //MsgStr = MsgStr + Environment.NewLine;//分行
byData = System.Text.Encoding.Default.GetBytes(MsgStr);//设置格式
if (LogFile.CanWrite) LogFile.Write(byData, 0, byData.Length);
str_list.Add(MsgStr);
LogFile.Seek(0, SeekOrigin.End);//在第一行打印
}
}
}
}
项目:
最终运行效果:
【小技巧】让最新的log消息显示在首行;
C#-WPF初学的更多相关文章
- WPF初学(一)——布局【良好界面的基础】
由Winform转到WPF的一部分人,很可能忽略掉布局,习惯性的使用固定定位.然而,没有良好的布局,后面界面控件画的再好看,花哨,都不过是鲜花插在牛粪上,很可能始终都是一坨??(呵呵). 闲话少说,首 ...
- WPF 初学VisifireChart
visifire今天登陆他们官网的时候,发现好像是挂掉了,不知道是不再运营了,还是单纯服务器出了问题. VisifireChart的效果不炫,但是对于一些项目,感觉够用的,所以,今天大概看了几篇博客, ...
- WinForm数字小键盘/WPF数字小键盘
模仿原本的WinForm触摸屏小键盘制作WPF触摸屏小键盘 原WinForm触摸屏小键盘样式(WinForm采用Krypton系列控件)如下图: Designer代码如下: // // BtnNum1 ...
- WPF datagrid 初学
<Window x:Class="WpfDemo.WinDataGrid" xmlns="http://schemas.microsoft.com/winfx/20 ...
- [初学WPF]控件大小自适应
想在Win上自己写点小工具用,GUI自然是免不了的,于是决定学一学WPF,直接拖控件是很方便啊.控件拖出来以后发现运行时改变窗口大小控件不会重绘,搜索了一下发现了解决办法:使用Viewbox控件. V ...
- (初学)wpf仿QQ界面-整体布局
跟一个小学弟一起学习wpf,小学弟是刚初中毕业,对编程刚刚接触,我挺怕自己带的不好,影响小学弟以后在编程方向的学习兴趣.我承认自己水平不高,但是在努力去学习新知识!一起加油吧!在此以博客,记录学习进度 ...
- WPF 我的初学必备技能
0.控件 0.1.内容控件(Content Controls) 0.2.条目控件(Items Controls) 0.3.文本控件(Text Controls) 0.4.范围控件(Range Cont ...
- [开发笔记]-初学WPF之自学笔记
一:动态加载背景图片 代码: 在窗体加载时,Window_Loaded 方法中: #region 测试动态加载背景图片 /* 1.图片右键 属性: 复制到输出目录:选择“如果较新则复制” 生成操作选择 ...
- WPF 变量绑定实现
最近初学WPF,遇到如控件的内容是动态生成的.这时候就需要变量绑定. 简单写下变量绑定的步骤. 如下面的 例子,TextBlock 的内容是动态的,绑定变量StuName. <TextBlock ...
- WPF之Binding初探
初学wpf,经常被Binding搞晕,以下记录写Binding的基础. 首先,盗用张图.这图形象的说明了Binding的机理. 对于Binding,意思是数据绑定,基本用法是: 1.在xmal中使用 ...
随机推荐
- 复杂模式的两个List与Map合并为一个Map的拼接;笛卡尔乘积处理数据问题
简介 (Introduction): 背景 数据从多个表中获取,每个表的数据条数不是唯一的,最后结果要拼接成一个Map<String,Object>的模式封装所有数据,每个数据是一条. 结 ...
- 基于webapi的websocket聊天室(二)
上一篇 - 基于webapi的websocket聊天室(一) 消息超传缓冲区的问题 在上一篇中我们定义了一个聊天室WebSocketChatRoom.但是每个游客只分配了400个字节的发言缓冲区,大概 ...
- Java生成微信小程序码
官网文档地址:获取小程序码 package test; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.cor ...
- linux基础之awk命令详解
一 awk主要是用来对指定对文本或者命令的输出逐行处理和分析的,下面来简单的看一下awk用法,方便以后需要使用的时候在回头看 1.1 基础的用法 [root@wxm ~]# cat test 1 ...
- Vue cli之路由router
一.安装路由 Vue-router用于提供给vue项目在开发中用于绑定url和组件页面的关系的核心插件. 默认情况下,vue没有提供路由的功能,所以我们使用vue-router,并需要在项目根目录. ...
- zabbix笔记_007 zabbix 分布式架构
1. zabbix 分布式架构[服务器数量较大的场景下使用] 现有架构: agent --> zabbix server proxy架构: agent --> zabbix proxy - ...
- MySQL学习笔记-数据控制语言
SQL-数据控制语言(DCL) DCL语句用于管理数据库用户,控制数据库的访问权限 一. 管理用户 1. 查询用户 # 访问mysql数据库 use mysql; #查询user表 select * ...
- WIN11 删除其它用户/账户
WIN11 删除其它用户/账户 参考:https://support.microsoft.com/zh-cn/windows/%E5%9C%A8%E7%94%B5%E8%84%91%E4%B8%8A% ...
- 白话理解和使用DOCKER VOLUME
Docker使用Volume来管理宿主机和容器内数据的映射 什么是数据卷(Volume)Docker镜像被存储在一系列的只读层中.当我们创建一个容器时,Docker会读取镜像(只读),并在其顶部添加 ...
- WPF/C#:程序关闭的三种模式
ShutdownMode枚举类型介绍 ShutdownMode是一个枚举类型,它定义了WPF应用程序的关闭方式.这个枚举类型有三个成员: OnLastWindowClose:当最后一个窗口关闭或者调用 ...