WPF C#でファンクションキーF10のイベント取得の事で
わかる方がおられたら教えてください。
今日1日ネットで調べたのですが、わかりませんでした。
よろしくお願いいたします。
開発環境 OS :WindowsXP、
Tool:Visual Studio 2010
NET Framework3.5 です。
やりたい事は、WPFの画面でF1~F12までの
ファンクションを押下してイベントを認識
できるかの調査を行いましたが、F10だけが
イベントを認識してくれません。
下記がコーディング内容です。
「XAML」
<Window x:Class="MUT3SEFunction.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/pre …
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" PreviewKeyDown="Window_PreviewKeyDown" mc:Ignorable="d"
xmlns:d="http://schemas.microsoft.com/expression/blend/20 …
xmlns:mc="http://schemas.openxmlformats.org/markup-compati …
d:DesignHeight="338" d:DesignWidth="478" SizeToContent="WidthAndHeight">
<TextBox Height="63" Name="textBox1" Width="253" Text="" FontSize="20"/>
</Window>
「C#」
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Input;
namespace MUT3SEFunction
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
textBox1.Text = e.Key.ToString() + "が押されました。";
}
}
}
ネットで調べた中で、『ProcessKeyPreviewメソッド』をオーバーライドしれば
できるとの事でためしてみましたがWPF画面では、ProcessKeyPreviewがオーバーライド
できるメソッドが無いとの事でビルドエラーが発生してしまいました。
C#のアプリケーション開発では、うまく動作しました。
下記のロジックです。
「C#」
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Forms;
namespace MUT3SEFunction
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
// F10キーが処理されたかどうかのフラグを設定します。
bool isF10_Processed = false;
// ProcessKeyPreviewメソッドをオーバーライドします。
protected override bool ProcessKeyPreview(ref Message m)
{
if (m.WParam == (IntPtr)(Keys.F10))
{
// F10が処理されていない場合、処理を実行します。
if (!isF10_Processed)
{
if (m.Msg == 0x105) // "0x105"は"WM_SYSKEYUP"を表します。
{
// カスタマ処理を実行します。
ProcessCustomLogic((Keys)m.WParam);
}
}
}
// フラグを常にクリアします。
isF10_Processed = false;
return ProcessKeyPreview(ref m);
}
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.F10)
{
// F10が処理されたことを記録します。
isF10_Processed = true;
}
// カスタマ処理を実行します。
ProcessCustomLogic(e.KeyData);
}
private void ProcessCustomLogic(Keys key)
{
// カスタマ処理を実装します。
textBox1.Text = key.ToString() + " が押されました。";
}
}
}
どうかわかる方がおれば、是非ご教授宜しく願いいたします。
初めての投稿で、雑な内容の質問で申し訳ありません。
最後にWPF開発者向けのお勧めのサイトがあれば是非教えてください。
以上です。よろしくお願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
string pushedKey = "";
switch (e.Key)
{
case Key.F1:
case Key.F2:
case Key.F3:
case Key.F4:
case Key.F5:
case Key.F6:
case Key.F7:
case Key.F8:
case Key.F9:
case Key.F11:
case Key.F12:
pushedKey = e.Key.ToString();
break;
case Key.System:
if (e.SystemKey == Key.F10)
{
pushedKey = "F10";
}
break;
}
textBox1.Text = pushedKey;
}
とか?
F10 って Windows 用のキーだから使わないほうがいいって聞くがね。
この回答への補足
回答ありがとうございます。
補足しますと、F10を押下した場合だけ「Window_PreviewKeyDown」のロジック自体認識しませんでした。
「F10 って Windows 用のキーだから使わないほうがいいって聞くがね。」については、
Windows 標準のショートカットキーだから使わない方が良いと聞きますが、F10をどうしても
必要としています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- C言語・C++・C# PC画面を録画するプログラムでdllの読み込みエラー 1 2023/04/22 08:31
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# 「using Windows」でエラーが出る 3 2022/12/23 19:53
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- 英語 英文和訳についての質問です。 2 2023/06/23 06:38
- 英語 From the data mentioned that extracted from the cu 1 2023/01/25 19:55
- 英語 『G19 Gen5 MOS - Modular Optic System for Gen5』 の 『 1 2023/03/05 13:37
- Windows 10 VirtualBox 7のゲストOSでの物理HDDパーティションのマウント方法 2 2023/05/04 13:01
- VPN 何これ 1 2022/04/19 01:32
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JAVA ID重複処理
-
再度、スレッドが実行中かどう...
-
無限ループをわざと作って時計...
-
ExcelVBA で文字列の特定の文字...
-
ブラウザを閉じた後のサーバ側...
-
バッチって何でしょうか?
-
ラベルの表示までが異常に遅い...
-
画面系イベントの優先度を上げたい
-
Ajaxの実行速度と読み方について
-
C#でバックグラウンド処理から...
-
doGetとdoPostの違い
-
java(swing)で、登録ボタンを押...
-
JavaScriptからJAVAクラスを呼...
-
スレッド1とスレッド2を交互に...
-
C#の処理をリアルタイムに表示...
-
Javaプログラムからポップアッ...
-
素数判定を再帰処理で
-
tryの終了
-
ラジオボタンの選択判定
-
Javaでのデバッグコード削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
数値の定数を付ける時
-
Javaでのデバッグコード削除
-
C#で別スレッドの終了を知りたい
-
[Java] while(true)の意味
-
Javaプログラムからポップアッ...
-
Tomcatのスレッドを破棄する方法
-
ラジオボタンの選択判定
-
JavaScriptからJAVAクラスを呼...
-
素数判定を再帰処理で
-
PHPでDB処理中にプログレスバー...
-
Javaアプリケーション実行の返...
-
WPF C#でF10のイベント取得方法...
-
doGetとdoPostの違い
-
switch文の中に、throws new Ex...
-
Tomcat高負荷時の設定について
-
ラベルの表示までが異常に遅い...
-
ExcelVBA で文字列の特定の文字...
-
JDBCでテーブルUPDATE後の再検...
-
SwingUtilities.invokeLater(ne...
おすすめ情報