热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我的.NetCore3.0windows桌面程序界面绘制从.netframework复制代码法

今天想用.netcore做个小程序。却意外的发现没有可视化编辑器!!!(重要的事情用三个感叹号)虽然我搞了十多年的.net开发,但是我确实从来没有自己编辑过Designer.cs这

今天想用 .net core做个小程序。却意外的发现没有可视化编辑器!!!(重要的事情用三个感叹号)

虽然我搞了十多年的 .net 开发,但是我确实从来没有自己编辑过 Designer.cs 这个文件。微软不是不让我编辑么!

///


/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///

我于是去网上搜,结果,人家确实是编辑Designer.cs文件的。

不过,我还是想动一点小聪明,逃避学习编辑 Designer.cs 。我想到的办法很简单,就是先用老的Windows Form(.net framework)程序,可视化的绘制好界面,然后复制到新的 windows form (.net core)。

绘制 windows form ( .net framework )

《我的.Net Core 3.0 windows 桌面程序界面绘制 -- 从.net framework法》
我的目标是绘制一个下拉框Combobox, 一个文本框textbox, 两个按钮 Buttons。相信绝大多数人如果直接敲代码绘制这样一个简单的windows form,也要费半天劲。有了工具栏(Toolbox),就简单多了。

别忘了双击两个按钮,把事件也加上。

这四个控件的代码,分为四个部分。分别是变量声明部分,变量实例化部分,具体设置部分,添加控件部分。另外事件也要复制过去。

变量声明部分

既给Form四个属性(Property),分别对应四个控件。所以,这段代码肯定在class的下面。具体到Designer.cs文件里,它们位于最底部。

如下:

private System.Windows.Forms.TextBox srtFileTextBox;
private System.Windows.Forms.Button browseButton;
private System.Windows.Forms.Button okayButton;
private System.Windows.Forms.ComboBox tvShowComboBox;

找到Windows Forms(.net core)程序的对应部分,复制过去。

变量实例化部分

这部分位于InitializeComponent函数的最开头。

private void InitializeComponent()
{
this.srtFileTextBox = new System.Windows.Forms.TextBox();
this.browseButton = new System.Windows.Forms.Button();
this.okayButton = new System.Windows.Forms.Button();
this.tvShowComboBox = new System.Windows.Forms.ComboBox();

找到.net core的对应位置复制过去即可。

具体设置部分

这里具体设置控件的一些属性,最主要的是位置,大小等。

//
// srtFileTextBox
//
this.srtFileTextBox.Location = new System.Drawing.Point(12, 46);
this.srtFileTextBox.Name = "srtFileTextBox";
this.srtFileTextBox.Size = new System.Drawing.Size(392, 20);
this.srtFileTextBox.TabIndex = 0;
//
// browseButton
//
this.browseButton.Location = new System.Drawing.Point(410, 46);
this.browseButton.Name = "browseButton";
this.browseButton.Size = new System.Drawing.Size(75, 23);
this.browseButton.TabIndex = 1;
this.browseButton.Text = "Browse...";
this.browseButton.UseVisualStyleBackColor = true;
this.browseButton.Click += new System.EventHandler(this.BrowseButton_Click);
//
// okayButton
//
this.okayButton.Location = new System.Drawing.Point(224, 72);
this.okayButton.Name = "okayButton";
this.okayButton.Size = new System.Drawing.Size(75, 23);
this.okayButton.TabIndex = 2;
this.okayButton.Text = "Okay";
this.okayButton.UseVisualStyleBackColor = true;
this.okayButton.Click += new System.EventHandler(this.OkayButton_Click);
//
// tvShowComboBox
//
this.tvShowComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.tvShowComboBox.FormattingEnabled = true;
this.tvShowComboBox.Items.AddRange(new object[] {
"权力的游戏",
"纸牌屋",
"复仇者联盟"});
this.tvShowComboBox.Location = new System.Drawing.Point(12, 12);
this.tvShowComboBox.Name = "tvShowComboBox";
this.tvShowComboBox.Size = new System.Drawing.Size(473, 21);
this.tvShowComboBox.TabIndex = 3;

找到.net core的对应部分,替换即可。

添加控件部分

所以的控件,必须添加到相应的容器之中。像GroupBox, Panel这些都是容器。当然Windows Form本身也是容器。

《我的.Net Core 3.0 windows 桌面程序界面绘制 -- 从.net framework法》

这里的四个控件,都直接隶属于Windows Form控件。

找到.net core的对应代码替换之即可。

复制事件

把form.cs里面的事件复制到 .net core 的 form.cs即可。

private void BrowseButton_Click(object sender, EventArgs e)
{
}
private void OkayButton_Click(object sender, EventArgs e)
{
}
调整位置大小

我满心期待着成功,结果出来这么个玩意儿。

《我的.Net Core 3.0 windows 桌面程序界面绘制 -- 从.net framework法》
我研究了一下,原来是这行代码捣的鬼:

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(500, 109);

把它也复制过去,这下样式正常了。

《我的.Net Core 3.0 windows 桌面程序界面绘制 -- 从.net framework法》
看看是不是和.net framework 的windows form一样了。

编辑逻辑代码

这里我和以前一样,使用了一个OpenFileDialog,选择一个srt文件并处理。

private void BrowseButton_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDlg = new OpenFileDialog();
openFileDlg.Filter = "Subtitle files (*.srt)|*.srt";
if(openFileDlg.ShowDialog() ==DialogResult.OK )
{
srtFileTextBox.Text = openFileDlg.FileName;
}
}
private void OkayButton_Click(object sender, EventArgs e)
{
//do something
Application.Exit();
}
源代码

见Github

https://github.com/juwikuang/CreateNetCoreWindowsFormFromFramework


推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
author-avatar
115路公交车_984
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有