質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

18157閲覧

MouseUpのイベントが起きない。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2016/01/08 01:35

いつもお世話になります。
WPF, Visual Studio 2013, Windows7, .NET4.5の組み合わせでの質問です。
textboxをクリックしたときのイベントで処理をしたいと思います。

textboxにはclickのイベントハンドらがないので、かわりにmouseupを使います。
これで、mouseupすると期待しているのですが、イベントが発生しません。
どのようにすればよいか、ご示唆ください。

xamlには比較のためにtextblockを配置しています。

xaml
<Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox Name="textbox" HorizontalAlignment="Left" Height="103" Margin="126,109,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Width="212" MouseUp="TextBox_MouseUp" />
<TextBlock HorizontalAlignment="Left" Margin="126,249,0,0" TextWrapping="Wrap" Name="TextBlock" VerticalAlignment="Top" Width="212" Height="45" MouseUp="TextBlock_MouseUp" Text="0"/>

</Grid>
</Window>

C#

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace WpfApplication2 {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}

//このイベントを発生させたい。
private void TextBox_MouseUp(object sender, MouseButtonEventArgs e) {
int counter = int.Parse(textbox.Text);
counter += 1;
textbox.Text = counter.ToString();
}

//このイベントは発生する。
private void TextBlock_MouseUp(object sender, MouseButtonEventArgs e) {
int counter = int.Parse(TextBlock.Text);
counter += 1;
TextBlock.Text = counter.ToString();
}
}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

TextBoxのMouseUpEventのハンドラーコレクションにルーティングイベントハンドラを手動で設定してあげれば、実現可能でしょう。

xml

1<Grid> 2 <TextBox Name="textbox" HorizontalAlignment="Left" Height="103" Margin="126,109,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Width="212" /> 3</Grid>

c#

1 2public MainWindow() 3{ 4 InitializeComponent(); 5 6 // 第3引数をtrueにすることにより、処理済みのルーティングイベントにも反応します。 7 textbox.AddHandler(TextBox.MouseUpEvent, new MouseButtonEventHandler(TextBox_MouseUp), true); 8} 9 10private void TextBox_MouseUp(object sender, MouseButtonEventArgs e) 11{ 12 int counter = int.Parse(textbox.Text); 13 counter += 1; 14 textbox.Text = counter.ToString(); 15}

余談ですが、なぜ標準でClickイベントがないのか、MouseUpイベントハンドラが呼び出されないのかというTextBoxの仕様や上記コードの挙動をよく検討してください。
もっと適した方法があるかもしれません。

投稿2016/01/08 04:54

wakuwaku

総合スコア386

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/01/08 05:58

ありがとうございます。 なるほど、全貌はわかりませんが、そういわれてみると、textboxはclickで単語を選択できたりするのでしたか。 今回は検討する時間がないです。なんか地雷を埋めた気分。
guest

0

こんにちは。

WPFでは標準で処理が実装されているイベントは下位に流れていかないようになっています。
この場合、PreviewMouseUpイベントで代用するのが良いと思います。

投稿2016/01/08 01:43

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/01/08 03:08

ありがとうございます。 次のようにしたところ、 すべてのmouseupを private void textbox_PreviewMouseUp(object sender, MouseButtonEventArgs e) { がとってしまい、[×](Window Close)なども押せない状況です。 TextBox textbox = sender as TextBox; でキャストしてもだめです。 objectごとにイベントを分けて処理するには、どのようにすればよいでしょう? WPF <Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <TextBox Name="textbox" HorizontalAlignment="Left" Height="103" Margin="126,109,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Width="212" PreviewMouseUp="textbox_PreviewMouseUp"/> <TextBlock HorizontalAlignment="Left" Margin="126,249,0,0" TextWrapping="Wrap" Name="TextBlock" VerticalAlignment="Top" Width="212" Height="45" PreviewMouseUp="TextBlock_PreviewMouseUp" Text="0"/> </Grid> </Window> C# using System.Windows; using System.Windows.Controls; using System.Windows.Input; namespace WpfApplication2 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } //このイベントを発生させたい。 private void TextBox_MouseUp(object sender, MouseButtonEventArgs e) { } //すべてをのっとる。 private void textbox_PreviewMouseUp(object sender, MouseButtonEventArgs e) { int counter = int.Parse(textbox.Text); counter += 1; textbox.Text = counter.ToString(); } private void TextBlock_MouseUp(object sender, MouseButtonEventArgs e) { //イベントが発生しない。 } //このイベントも発生しない。 private void TextBlock_PreviewMouseUp(object sender, MouseButtonEventArgs e) { int counter = int.Parse(TextBlock.Text); counter += 1; TextBlock.Text = counter.ToString(); } } }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問