2016-11-20 10 views
0

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); 
    } 
+0

2つの質問をする必要があります。まずはボタン移動について、次にxmlへの/からのデータの保存/ロードについて説明します。 –

+0

申し訳ありませんが、私は明確ではありませんでした。ボタンはうまく動く。私は場所を保存できません。 –

+0

あなたのセービングコードを表示してください。 –

答えて

0

ボタンを移動するには、次のコードを使用します。このイベントハンドラの各ボタンを登録します。

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イベントをトリガーすることなくドラッグするか、または右ドラッグすることは可能ですか? –

関連する問題