700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C#开发实例-订制屏幕截图工具(六)添加配置管理功能详解(图文)

C#开发实例-订制屏幕截图工具(六)添加配置管理功能详解(图文)

时间:2020-04-10 17:52:43

相关推荐

C#开发实例-订制屏幕截图工具(六)添加配置管理功能详解(图文)

后端开发|C#.Net教程

C#,配置管理,屏幕截图工具

后端开发-C#.Net教程

源码as,vscode 界面设计,ubuntu出现PCIB,多个tomcat部署拥挤,sqlite网页设计数据库,爬虫爬虫爬虫怎么写,mysql php 电商,大连seo排名优化,小型门户网站模板,cms 政府网站 模板 div csslzw

添加设置窗口

在解决方案资源管理器窗口中,右键单击项目名称,在弹出的菜单中选择:添加》Windows窗体:

友价t5商城交易源码,ubuntu里面编程换行,tomcat打开猫的页面,多多买爬虫,html中用php,越秀区市场seo优化包括什么lzw

源码 企业,theme vscode,ubuntu检测硬件,tomcat观望,redis对比sqlite,如何注册dns服务器,视频播放 插件,虎扑前端框架,web爬虫技术,php组合包,seo深度优化公司,如何备份网站,flash网页源文件下载,淘宝卖模板刷信誉,手机页面翻页,access 图书管理系统,小程序论坛代码lzw

输入窗体名称“frmSetup”:

设置窗体的Text属性为“设置”,设置窗体的Size为“472, 276”,StartPosition属性为“CenterScreen”。

添加设置标签页:

左侧工具箱》窗器:双击“TabControl”

设置的Dock属性为“Top”,Size属性为“456, 200”;

添加标签页:

添加三个标签页,Text分别设置为“基本设置,自动上传,自动保存”

添加确定和取消按钮;

基本设置标签页:

从工具箱中添加两个GroupBox,分别为“热键、截图选项”;

添加两个RadioButton,用于热键选择;

添加四个CheckBox用于截图选项;

添加两个TextBox用于设置放大镜的尺寸;

添加两个PictureBox用于显示X和锁的图片;

添加图片资源:

双击Properties中的“Resources.resx”

切换到图像视图:

将图片复制,粘贴到这里,分别命名为“Lock,X”;

设置PictureBox的Image属性为对应的资源:

自动上传标签页:

自动保存标签页:

其中文件名称需要使用两个ComboBox,Items集合分别设置为:

编写代码:

双击设置窗体,切换到代码视图,添加私有变量:

/// private IntPtr frm1Handle = IntPtr.Zero;

修改构造函数:

/// /// public frmSetup(IntPtr frm1_Handle) { InitializeComponent(); this.frm1Handle = frm1_Handle; }

为托盘菜单中的设置添加事件处理

打开主窗体Form1的设计视图,选中“contextMenuStrip1”

修改设置菜单的Name为“tsmi_Set”,双击设置菜单,添加代码:

/// /// /// private void tsmi_Set_Click(object sender, EventArgs e) { frmSetup frm = new frmSetup(this.Handle); frm.ShowDialog(); }

编译,调试一下,通过托盘图标的右键菜单》设置 可以打开刚刚添加的设置窗口了。

添加项目引用:

主窗体添加相关配置项变量:

#region 基本设置参数 /// public bool InfoBoxVisible = true; /// public bool ToolBoxVisible = true; /// public bool IsCutCursor = true; /// public bool ZoomBoxVisible = true; /// public int ZoomBoxWidth = 120; /// public int ZoomBoxHeight = 100; #endregion #region 图片上传参数 public string PicDescFieldName = "pictitle"; public string ImageFieldName = "upfile"; public string PicDesc = "cutImage"; public string UploadUrl = "http://"; public bool DoUpload = false; #endregion #region 自动保存参数 /// public bool AutoSaveToDisk = false; /// public string AutoSaveDirectory = string.Empty; /// public bool AutoSaveSubDir = false; /// public string AutoSaveFileName1 = "屏幕截图"; /// public string AutoSaveFileName2 = "日期时间"; /// public string AutoSaveFileName3 = ".jpg"; /// public int autoSaveFileIndex = 0; #endregion 自动保存参数

添加“AppSettingKeys”类:

///public static class AppSettingKeys { //基本设置 public static string HotKeyMode = "HotKeyMode"; public static string InfoBoxVisible = "InfoBoxVisible"; public static string ToolBoxVisible = "ToolBoxVisible"; public static string ZoomBoxVisible = "ZoomBoxVisible"; public static string ZoomBoxWidth = "ZoomBoxWidth"; public static string ZoomBoxHeight = "ZoomBoxHeight"; public static string IsCutCursor = "IsCutCursor"; //图片上传 public static string PicDescFieldName = "PicDescFieldName"; public static string ImageFieldName = "ImageFieldName"; public static string PicDesc = "PicDesc"; public static string UploadUrl = "UploadUrl"; public static string DoUpload = "DoUpload"; //自动保存 public static string AutoSaveToDisk = "AutoSaveToDisk"; public static string AutoSaveSubDir = "AutoSaveSubDir"; public static string AutoSaveDirectory = "AutoSaveDirectory"; public static string AutoSaveFileName1 = "AutoSaveFileName1"; public static string AutoSaveFileName2 = "AutoSaveFileName2"; public static string AutoSaveFileName3 = "AutoSaveFileName3"; }

Program.cs文件添加枚举类型:

///public enum KeyModifiers : uint { None = 0, Alt = 1, Control = 2, Shift = 4, Windows = 8 }

警告:由于xxx是引用封送类的字段,访问上面的成员可能导致运行时异常

设置窗口完整代码:

using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace Screenshot{ public partial class frmSetup : Form { /// private IntPtr frm1Handle = IntPtr.Zero; /// /// public frmSetup(IntPtr frm1_Handle) { InitializeComponent(); this.frm1Handle = frm1_Handle; } /// /// /// private void button_ok_Click(object sender, EventArgs e) { if (checkBox_autoSave.Checked && textBox_saveDir.Text.Trim().Length == 0) {MessageBox.Show("您选择了“自动保存屏幕截图到磁盘”\n但还没有设置存储目录!");return; } if (checkBox_autoSave.Checked && textBox_saveDir.Text.Trim().Length > 0) {if (!System.Text.RegularExpressions.Regex.IsMatch(textBox_saveDir.Text.Trim(), "^[a-zA-Z]:\\\\[^/:\\*\\?\"\\|]*$", System.Text.RegularExpressions.RegexOptions.IgnoreCase)){ MessageBox.Show("您选择了“自动保存屏幕截图到磁盘”\n但设置的存储目录不是有效的目录!"); return;}if (!System.IO.Directory.Exists(textBox_saveDir.Text.Trim())){ MessageBox.Show("您选择了“自动保存屏幕截图到磁盘”\n但设置的存储目录不存在!"); return;} } Form1 frm = (Form1)Form.FromHandle(frm1Handle); if (frm != null) {//基本设置if (radioButton1.Checked) // && frm.HotKeyMode != 0 无论是否改变都重新注册热键,解决有时热键失效的问题{ Form1.UnregisterHotKey(frm1Handle, frm.hotKeyId); Form1.RegisterHotKey(frm1Handle, frm.hotKeyId, (uint)KeyModifiers.Control | (uint)KeyModifiers.Alt, Keys.A); frm.HotKeyMode = 0;}if (radioButton2.Checked) // && frm.HotKeyMode != 1 无论是否改变都重新注册热键,解决有时热键失效的问题{ Form1.UnregisterHotKey(frm1Handle, frm.hotKeyId); Form1.RegisterHotKey(frm1Handle, frm.hotKeyId, (uint)KeyModifiers.Control | (uint)KeyModifiers.Shift, Keys.A); frm.HotKeyMode = 1;}frm.InfoBoxVisible = ckb_InfoBox.Checked;frm.ToolBoxVisible = ckb_ToolBox.Checked;frm.IsCutCursor = ckb_CutCursor.Checked;frm.ZoomBoxVisible = ckb_ZoomBox.Checked;frm.ZoomBoxWidth1 = Convert.ToInt32(tb_zoomBoxWidth.Text);frm.ZoomBoxHeight1 = Convert.ToInt32(tb_zoomBoxHeight.Text);if (frm.ZoomBoxWidth1 < 120){ frm.ZoomBoxWidth1 = 120; tb_zoomBoxWidth.Text = frm.ZoomBoxWidth1.ToString();}if (frm.ZoomBoxHeight1 < 100){ frm.ZoomBoxHeight1 = 100; tb_zoomBoxHeight.Text = frm.ZoomBoxHeight1.ToString();}//图片上传frm.PicDescFieldName = textBox_fieldDesc.Text;frm.ImageFieldName = textBox_fieldFile.Text;frm.PicDesc = textBox_desc.Text;frm.UploadUrl = textBox_uploadUrl.Text;frm.DoUpload = checkBox_upload.Checked;//自动保存frm.AutoSaveToDisk = checkBox_autoSave.Checked;frm.AutoSaveSubDir = chb_subDir.Checked;frm.AutoSaveDirectory = textBox_saveDir.Text;frm.AutoSaveFileName1 = textBox_fileName1.Text;if (comboBox_fileName2.SelectedItem != null){ frm.AutoSaveFileName2 = comboBox_fileName2.Text;}else{ frm.AutoSaveFileName2 = "日期时间";}if (comboBox_Extn.SelectedItem != null){ frm.AutoSaveFileName3 = comboBox_Extn.Text;}else{ frm.AutoSaveFileName3 = ".jpg";} } SaveConfiguration(); this.Close(); } /// private void SaveConfiguration() { System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(null); //基本设置 SetConfigAppSetting(ref config, AppSettingKeys.HotKeyMode, radioButton1.Checked ? "1" : "0"); SetConfigAppSetting(ref config, AppSettingKeys.InfoBoxVisible, ckb_InfoBox.Checked ? "1" : "0"); SetConfigAppSetting(ref config, AppSettingKeys.ToolBoxVisible, ckb_ToolBox.Checked ? "1" : "0"); SetConfigAppSetting(ref config, AppSettingKeys.IsCutCursor, ckb_CutCursor.Checked ? "1" : "0"); SetConfigAppSetting(ref config, AppSettingKeys.ZoomBoxVisible, ckb_ZoomBox.Checked ? "1" : "0"); SetConfigAppSetting(ref config, AppSettingKeys.ZoomBoxWidth, tb_zoomBoxWidth.Text); SetConfigAppSetting(ref config, AppSettingKeys.ZoomBoxHeight, tb_zoomBoxHeight.Text); //图片上传 SetConfigAppSetting(ref config, AppSettingKeys.PicDescFieldName, textBox_fieldDesc.Text.Trim()); SetConfigAppSetting(ref config, AppSettingKeys.ImageFieldName, textBox_fieldFile.Text.Trim()); SetConfigAppSetting(ref config, AppSettingKeys.PicDesc, textBox_desc.Text.Trim()); SetConfigAppSetting(ref config, AppSettingKeys.UploadUrl, textBox_uploadUrl.Text.Trim()); SetConfigAppSetting(ref config, AppSettingKeys.DoUpload, checkBox_upload.Checked ? "1" : "0"); //自动保存 SetConfigAppSetting(ref config, AppSettingKeys.AutoSaveToDisk, checkBox_autoSave.Checked ? "1" : "0"); SetConfigAppSetting(ref config, AppSettingKeys.AutoSaveSubDir, chb_subDir.Checked ? "1" : "0"); SetConfigAppSetting(ref config, AppSettingKeys.AutoSaveDirectory, textBox_saveDir.Text.Trim()); SetConfigAppSetting(ref config, AppSettingKeys.AutoSaveFileName1, textBox_fileName1.Text.Trim()); if (comboBox_fileName2.SelectedItem != null) {SetConfigAppSetting(ref config, AppSettingKeys.AutoSaveFileName2, comboBox_fileName2.Text); } else {SetConfigAppSetting(ref config, AppSettingKeys.AutoSaveFileName2, "日期时间"); } if (comboBox_Extn.SelectedItem != null) {SetConfigAppSetting(ref config, AppSettingKeys.AutoSaveFileName3, comboBox_Extn.Text); } else {SetConfigAppSetting(ref config, AppSettingKeys.AutoSaveFileName3, ".jpg"); } config.Save(System.Configuration.ConfigurationSaveMode.Modified); } /// /// /// /// /// private bool SetConfigAppSetting(ref System.Configuration.Configuration config, string key, string value) { try {if (config.AppSettings.Settings[key] != null){ config.AppSettings.Settings[key].Value = value;}else{ config.AppSettings.Settings.Add(key, value);}return true; } catch (Exception ex) {MessageBox.Show(ex.Message + ex.Source + ex.StackTrace);return false; } } /// /// /// /// private string GetConfigAppSetting(ref System.Configuration.Configuration config, string key) { try {if (config.AppSettings.Settings[key] != null){ return config.AppSettings.Settings[key].Value;} } catch (Exception ex) {MessageBox.Show(ex.Message + ex.Source + ex.StackTrace); } return string.Empty; } /// /// /// private void button_cancel_Click(object sender, EventArgs e) { this.Close(); } /// /// /// private void frmSetup_Load(object sender, EventArgs e) { chb_subDir.Text = "启用(按日期命名,格式:" + DateTime.Now.Date.ToString("yyyy_MM_dd") + ")"; Form1 frm = (Form1)Form.FromHandle(frm1Handle); if (frm != null) {//基本设置if (frm.HotKeyMode == 0){ radioButton1.Checked = true; radioButton2.Checked = false;}else{ radioButton1.Checked = false; radioButton2.Checked = true;}ckb_InfoBox.Checked = frm.InfoBoxVisible;ckb_ToolBox.Checked = frm.ToolBoxVisible;ckb_CutCursor.Checked = frm.IsCutCursor;ckb_ZoomBox.Checked = frm.ZoomBoxVisible;//图片上传textBox_fieldDesc.Text = frm.PicDescFieldName;textBox_fieldFile.Text = frm.ImageFieldName;textBox_desc.Text = frm.PicDesc;textBox_uploadUrl.Text = frm.UploadUrl;checkBox_upload.Checked = frm.DoUpload;//自动保存checkBox_autoSave.Checked = frm.AutoSaveToDisk;chb_subDir.Checked = frm.AutoSaveSubDir;textBox_saveDir.Text = frm.AutoSaveDirectory;textBox_fileName1.Text = frm.AutoSaveFileName1;comboBox_fileName2.SelectedItem = frm.AutoSaveFileName2;comboBox_Extn.SelectedItem = frm.AutoSaveFileName3; } } /// /// /// private void button_browse_Click(object sender, EventArgs e) { FolderBrowserDialog fbd = new FolderBrowserDialog(); fbd.Description = "请选择屏幕截图的保存目录:"; fbd.ShowNewFolderButton = true; fbd.RootFolder = Environment.SpecialFolder.MyComputer; fbd.SelectedPath = textBox_saveDir.Text; if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK) {textBox_saveDir.Text = fbd.SelectedPath; } } /// private void UpdateFileNameExmple() { string AutoSaveFileName2 = string.Empty; if (comboBox_fileName2.SelectedItem != null) {AutoSaveFileName2 = comboBox_fileName2.Text; } string AutoSaveFileName3 = ".jpg"; if (comboBox_Extn.SelectedItem != null) {AutoSaveFileName3 = comboBox_Extn.Text; } switch (AutoSaveFileName2) {case "日期_序号": textBox_exmple.Text = textBox_fileName1.Text + DateTime.Now.ToString("yyyy-MM-dd_") + "0001" + AutoSaveFileName3; break;case "序号": textBox_exmple.Text = textBox_fileName1.Text + "0001" + AutoSaveFileName3; break;default: textBox_exmple.Text = textBox_fileName1.Text + DateTime.Now.ToString("yyyy-MM-dd_HHmmss") + AutoSaveFileName3; break; } } private void comboBox_fileName2_SelectedIndexChanged(object sender, EventArgs e) { UpdateFileNameExmple(); } private void comboBox_Extn_SelectedIndexChanged(object sender, EventArgs e) { UpdateFileNameExmple(); } private void textBox_fileName1_TextChanged(object sender, EventArgs e) { UpdateFileNameExmple(); } // Boolean flag used to determine when a character other than a number is entered. private bool nonNumberEntered = false; private void tb_zoomBoxWidth_KeyDown(object sender, KeyEventArgs e) { // Initialize the flag to false. nonNumberEntered = false; // Determine whether the keystroke is a number from the top of the keyboard. if (e.KeyCode Keys.D9) {// Determine whether the keystroke is a number from the keypad.if (e.KeyCode Keys.NumPad9){ // Determine whether the keystroke is a backspace. if (e.KeyCode != Keys.Back) { // A non-numerical keystroke was pressed. // Set the flag to true and evaluate in KeyPress event. nonNumberEntered = true; }} } //If shift key was pressed, its not a number. if (Control.ModifierKeys == Keys.Shift) {nonNumberEntered = true; } } private void tb_zoomBoxHeight_KeyDown(object sender, KeyEventArgs e) { // Initialize the flag to false. nonNumberEntered = false; // Determine whether the keystroke is a number from the top of the keyboard. if (e.KeyCode Keys.D9) {// Determine whether the keystroke is a number from the keypad.if (e.KeyCode Keys.NumPad9){ // Determine whether the keystroke is a backspace. if (e.KeyCode != Keys.Back) { // A non-numerical keystroke was pressed. // Set the flag to true and evaluate in KeyPress event. nonNumberEntered = true; }} } //If shift key was pressed, its not a number. if (Control.ModifierKeys == Keys.Shift) {nonNumberEntered = true; } } private void tb_zoomBoxWidth_KeyPress(object sender, KeyPressEventArgs e) { // Check for the flag being set in the KeyDown event. if (nonNumberEntered == true) {// Stop the character from being entered into the control since it is non-numerical.e.Handled = true; } } private void tb_zoomBoxHeight_KeyPress(object sender, KeyPressEventArgs e) { // Check for the flag being set in the KeyDown event. if (nonNumberEntered == true) {// Stop the character from being entered into the control since it is non-numerical.e.Handled = true; } } /// /// /// private void tb_zoomBoxWidth_TextChanged(object sender, EventArgs e) { int zoomWidth = Convert.ToInt32(tb_zoomBoxWidth.Text); if (zoomWidth < 120) { zoomWidth = 120; } tb_zoomBoxHeight.Text = ((int)(zoomWidth * 100 / 120)).ToString(); } /// /// /// private void tb_zoomBoxHeight_TextChanged(object sender, EventArgs e) { int zoomHeight = Convert.ToInt32(tb_zoomBoxHeight.Text); if (zoomHeight < 100) { zoomHeight = 100; } tb_zoomBoxWidth.Text = ((int)(zoomHeight * 120 / 100)).ToString(); } }}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。