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

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

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

Re[3]: 双方向データバインドが反映されない


(過去ログ 153 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■89172 / inTopicNo.1)   双方向データバインドが反映されない
  
□投稿者/ 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));
}
}
}
}


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

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

メニューのクリックイベントハンドラの冒頭で ValidateChildren(); とか呼んであげれば良いとは思います。
(ほかに良い方法があるかは未検討)
引用返信 編集キー/
■89177 / inTopicNo.3)  Re[2]: 双方向データバインドが反映されない
□投稿者/ B.B (6回)-(2018/11/04(Sun) 23:25:57)
No89176 (Azulean さん) に返信
> ■No89172 (B.B さん) に返信

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

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


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -