C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

双方向データバインドが反映されない /B.B (18/11/04(Sun) 20:05) #89172
Re[1]: 双方向データバインドが反映されない /Azulean (18/11/04(Sun) 22:35) #89176
  └ Re[2]: 双方向データバインドが反映されない /B.B (18/11/04(Sun) 23:25) #89177
    └ Re[3]: 双方向データバインドが反映されない /B.B (18/11/04(Sun) 23:26) #89178 解決済み


親記事 / ▼[ 89176 ]
■89172 / 親階層)   双方向データバインドが反映されない
□投稿者/ B.B (5回)-(2018/11/04(Sun) 20:05:00)

分類:[C#] 

Windows10
Visual Studio 2017

MenuStrip、TextBox、Buttonを配置したWindowsフォームで以下のようなコードを動作させてtextBox1に文字を入力します。

button1をクリックすると入力した文字列が表示されます。
ToolStripMenuItemをクリックすると入力前の文字列が表示されます。

先にbutton1をクリックして反映させた後でToolStripMenuItemをクリックすれば反映されます。

ToolStripMenuItemクリックだけで反映させるにはどのようにすればよいでしょうか。
よろしくお願いいたします。


using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
Binding binding = new Binding();
public Form1()
{
InitializeComponent();
textBox1.DataBindings.Add("Text", binding, "InputText");
}

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(binding.InputText);
}

private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show(binding.InputText);
}
}

public class NofityPropertyChanged : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(String info)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info));
}
}

public class Binding : NofityPropertyChanged
{
private string _InputText;
public string InputText
{
get { return _InputText; }
set
{
_InputText = value;
NotifyPropertyChanged(nameof(InputText));
}
}
}
}


[ □ Tree ] 返信 編集キー/

▲[ 89172 ] / ▼[ 89177 ]
■89176 / 1階層)  Re[1]: 双方向データバインドが反映されない
□投稿者/ Azulean (1007回)-(2018/11/04(Sun) 22:35:27)
No89172 (B.B さん) に返信
> ToolStripMenuItemクリックだけで反映させるにはどのようにすればよいでしょうか。

Button をクリックする場合は TextBox からフォーカスが失われるので自動的に確定操作とみなされます。
メニューへの操作の場合はフォーカスが失われないので、そういった動きになりません。

メニューのクリックイベントハンドラの冒頭で ValidateChildren(); とか呼んであげれば良いとは思います。
(ほかに良い方法があるかは未検討)
[ 親 89172 / □ Tree ] 返信 編集キー/

▲[ 89176 ] / ▼[ 89178 ]
■89177 / 2階層)  Re[2]: 双方向データバインドが反映されない
□投稿者/ B.B (6回)-(2018/11/04(Sun) 23:25:57)
No89176 (Azulean さん) に返信
> ■No89172 (B.B さん) に返信

>> メニューのクリックイベントハンドラの冒頭で ValidateChildren(); とか呼んであげれば良いとは思います。

ValidateChildren();で解決いたしました。ありがとうございました
[ 親 89172 / □ Tree ] 返信 編集キー/

▲[ 89177 ] / 返信無し
■89178 / 3階層)  Re[3]: 双方向データバインドが反映されない
□投稿者/ B.B (8回)-(2018/11/04(Sun) 23:26:56)
No89177 (B.B さん) に返信
> ■No89176 (Azulean さん) に返信
>>■No89172 (B.B さん) に返信
>
> >> メニューのクリックイベントハンドラの冒頭で ValidateChildren(); とか呼んであげれば良いとは思います。
>
> ValidateChildren();で解決いたしました。ありがとうございました
解決済み
[ 親 89172 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -