xml帮助类
public class Xmlhelp
{
private Keys _displaykey;//显示窗口
private Keys _existkey;//退出窗口键
private Keys _hidekey;//隐藏窗口键
#region 给私有变量添加公共属性
public Keys DisplayKey
{
get
{
return _displaykey;
}
set
{
_displaykey = value;
}
}
public Keys Existkey
{
get
{
return _existkey;
}
set
{
_existkey = value;
}
}
public Keys Hidekey
{
get
{
return _hidekey;
}
set
{
_hidekey = value;
}
}
#endregion
/// <summary>
/// 从xml读取信息
/// </summary>
public void LoadFromXmlFile()
{
XmlTextReader reader;
if (File.Exists("KeySet.xml"))
{
//优先读取外部keyset.xml文件
reader = new XmlTextReader("KeySet.xml");
}
else
{
//如果KeySet.xml文件不存在,则从嵌入资源内读取KeySet.xml
Assembly asm = Assembly.GetExecutingAssembly();
Stream sm = asm.GetManifestResourceStream("KeySettingDemo.KeySet.xml");
reader = new XmlTextReader(sm);
}
try
{
//根据xml节点名称读取相应的键值为变量赋值
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
if (reader.Name == "Existkey")
{
_existkey = (Keys)Convert.ToInt32(reader.ReadElementString().Trim());
}
else if (reader.Name == "Displaykey")
{
_displaykey = (Keys)Convert.ToInt32(reader.ReadElementString().Trim());
}
else if (reader.Name == "Hidekey")
{
_hidekey = (Keys)Convert.ToInt32(reader.ReadElementString().Trim());
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
if (reader != null)
reader.Close();
}
}
/// <summary>
/// 将快捷键信息保存为xml文件
/// </summary>
public void SaveToXmlFile()
{
XmlDocument doc = new XmlDocument();
doc.LoadXml("<KeySet></KeySet>");
XmlNode root = doc.SelectSingleNode("KeySet");
//写快捷键
XmlElement xelKey = doc.CreateElement("Key");
XmlElement xelExistkey = doc.CreateElement("Existkey");
xelExistkey.InnerText = Convert.ToInt32(_existkey).ToString();
xelKey.AppendChild(xelExistkey);
XmlElement xelDisplayKey = doc.CreateElement("Displaykey");
xelDisplayKey.InnerText = Convert.ToInt32(_displaykey).ToString();
xelKey.AppendChild(xelDisplayKey);
XmlElement xelHideKey= doc.CreateElement("Hidekey");
xelHideKey.InnerText = Convert.ToInt32(_hidekey).ToString();
xelKey.AppendChild(xelHideKey);
root.AppendChild(xelKey);
doc.Save("KeySet.xml");
}
}
快捷键设置窗体
private void Form1_Load(object sender, EventArgs e)
{
//读取快捷键参数给文本框Text和Tag属性赋值
Xmlhelp xml = new Xmlhelp();
xml.LoadFromXmlFile();
txtDisplay.Text= ((Keys)xml.DisplayKey).ToString();
txtDisplay.Tag = xml.DisplayKey;
txtExist.Text = ((Keys)xml.Existkey).ToString();
txtExist.Tag = xml.Existkey;
txtHide.Text = ((Keys)xml.Hidekey).ToString();
txtHide.Tag = xml.Hidekey;
}
private void btnSave_Click(object sender, EventArgs e)
{
//根据xml中保存的键值为文本框的Tag属性赋值
Xmlhelp xml = new Xmlhelp();
xml.DisplayKey= (Keys)txtDisplay.Tag;
xml.Existkey = (Keys)txtExist.Tag;
xml.Hidekey = (Keys)txtHide.Tag;
xml.SaveToXmlFile();
MessageBox.Show("保存成功", "提示窗口", MessageBoxButtons.OK, MessageBoxIcon.Information);
Form2 frm2 = new Form2();
frm2.Show();
}
/// <summary>
/// 窗体中所有文本框共用此事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void txtDisplay_KeyDown(object sender, KeyEventArgs e)
{
//首先排除一些不适合的键值
if ((e.KeyValue >= 33 && e.KeyValue <= 36) || (e.KeyValue >= 45 && e.KeyValue <= 46) ||
(e.KeyValue >= 48 && e.KeyValue <= 57) || (e.KeyValue >= 65 && e.KeyValue <= 90) ||
(e.KeyValue >= 96 && e.KeyValue <= 107) || (e.KeyValue >= 109 && e.KeyValue <= 111) ||
(e.KeyValue >= 186 && e.KeyValue <= 192) || (e.KeyValue >= 219 && e.KeyValue <= 222))
{
//检查是否存在冲突的快捷键
foreach (Control c in gbKeySet.Controls)
{
//将控件基类转换为TextBox
Control TempC = c as TextBox;
if (TempC != null && ((TextBox)TempC).Text != "")
{
//如果某个文本框当前的Tag值与其本身的键值相等
//说明此快捷键已被占用
if (((int)((TextBox)TempC).Tag) == e.KeyValue)
{
//清空当前文本框的Text和Tag值
((TextBox)TempC).Text = "";
((TextBox)TempC).Tag = Keys.None;
}
}
}
//文本框的Text属性存放快捷键编码
((TextBox)sender).Text = e.KeyCode.ToString();
//文本框的Tag属性存放快捷键的键值
((TextBox)sender).Tag = (Keys)e.KeyValue;
}
}
设置完成后测试窗体
private void Form2_Load(object sender, EventArgs e)
{
Xmlhelp xml = new Xmlhelp();
xml.LoadFromXmlFile();
_displaykey = xml.DisplayKey;
_existkey = xml.Existkey;
_hidekey = xml.Hidekey;
}
private void Form2_KeyDown(object sender, KeyEventArgs e)
{
//当前按下的键编码与xml中保存的键值相等则执行对应的方法
if(e.KeyCode==_existkey)
{
Exist();
}
if(e.KeyCode==_displaykey)
{
Display();
}
if(e.KeyCode==_hidekey)
{
hide();
}
}
版权声明:本文为qq_37344688原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。