无法将按钮位置保存在XML文件中
问题描述:
我有一个带10个小按钮(20 x 20)的用户控件。我正在使用以下代码来允许用户只沿x轴拖动每个按钮。 然后我想将它的X位置保存到一个列表中,该列表可以保存为XML文件的一部分,然后在下次运行应用程序时加载相同的按钮位置。出于某种原因,我无法保存按钮位置。即使消息框不显示。我究竟做错了什么?无法将按钮位置保存在XML文件中
private Point p;
private void button2_mousedown(object sender, MouseEventArgs e)
{
string buttonName = ((Button)sender).Name;
Button b1 = ((Button)sender);
if (e.Button == MouseButtons.Left)
{
p = e.Location;
}
}
private void button2_mousemove(object sender, MouseEventArgs e)
{
string buttonName = ((Button)sender).Name;
Button b1 = ((Button)sender);
if (e.Button == MouseButtons.Left)
{
b1.Left = e.X + b1.Left - p.X;
}
int idx = int.Parse(buttonName) - 1;
scriptIconLocation[idx] = b1.Left;
//MessageBox.Show(scriptIconLocation[idx].ToString(), "saved location");
savedSettings.ScriptIconLocation = scriptIconLocation;
saveSettingsXML(savedSettings);
}
答
要移动按钮,请使用以下代码。订阅此事件处理程序上的每个按钮。
private void Button_MouseMove(object sender, MouseEventArgs e)
{
var button = (Button)sender;
if (e.Button == MouseButtons.Left)
{
button.Left = PointToClient(Cursor.Position).X;
}
}
MouseDown
事件没有必要。
不要用鼠标每移动保存XML数据,因为它是非常低效的。
这样做,例如,当表单关闭时。并在表单加载时读取数据。
private void Form1_Load(object sender, EventArgs e)
{
// Array of your buttons.
var buttons = userControl.Controls.OfType<Button>().ToArray();
var xml = XElement.Load("buttons.xml").Elements("X").ToArray();
for (int i = 0; i < buttons.Length; i++)
{
buttons[i].Left = (int)xml[i];
}
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
var buttons = userControl.Controls.OfType<Button>();
var xml = new XElement("Buttons",
buttons.Select(b => new XElement("X", b.Left)));
xml.Save("buttons.xml");
}
+0
一旦我将其更改为MouseUp处理程序,就可以正常工作。题。是否可以在不触发Click事件的情况下进行左拖动,或者在没有触发上下文菜单事件的情况下进行右拖动? –
您必须提出两个不同的问题。首先关于按钮的移动,其次是关于从xml保存/加载数据。 –
对不起,我不清楚。按钮移动得很好。我无法保存位置。 –
那么,显示你的保存代码。 –