• ベストアンサー

デスクトップ上に表示するテキストボックス

Power Toys Runのように、画面上にテキストボックスを表示して色々できるアプリを作りたいと思っています。 WPFもしくはWinUI3でどのようにすれば実現できるか教えてください。 ・タイトルバー(コントロールバー)を表示しない ・ウィンドウいっぱいにテキストボックスを表示する ・サイズは変えられない ・ウィンドウの端っこを掴むと移動できる ・フォーカスが外れると閉じる フレームワークは .NET6.0です

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

お問い合わせいただきありがとうございます。Power Toys Runのような画面上にテキストボックスを表示して色々な操作を行えるアプリを作成する方法をお教えいたします。 まず、実現したい機能について説明いたします。 1. タイトルバーを非表示にする方法 タイトルバーを非表示にするには、Windowsアプリケーションのウィンドウスタイルを変更する必要があります。以下のコードを使用して、タイトルバーを非表示にすることができます。 ```csharp using System; using System.Runtime.InteropServices; using System.Windows; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); WindowStyle = WindowStyle.None; } // タイトルバーのドラッグ移動を実装するためのコード(後述) } ``` 2. ウィンドウいっぱいにテキストボックスを表示する方法 ウィンドウいっぱいにテキストボックスを表示するには、GridやStackPanelなどのコンテナを使用して、テキストボックスを配置します。以下のコードを使用して、ウィンドウいっぱいにテキストボックスを表示することができます。 ```xaml <Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="My App" Height="450" Width="800"> <Grid> <TextBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> </Grid> </Window> ``` 3. サイズを固定する方法 ウィンドウのサイズを固定するには、ウィンドウのResizeModeプロパティをNoResizeに設定します。以下のコードを使用して、ウィンドウのサイズを固定することができます。 ```csharp using System; using System.Runtime.InteropServices; using System.Windows; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); ResizeMode = ResizeMode.NoResize; } // タイトルバーのドラッグ移動を実装するためのコード(後述) } ``` 4. ウィンドウの端を掴んで移動する方法 ウィンドウの端を掴んで移動するには、ウィンドウのMouseDown、MouseMove、MouseUpなどのイベントをハンドリングして、マウスの位置に応じてウィンドウを移動させる必要があります。以下のコードを使用して、ウィンドウの端を掴んで移動することができます。 ```csharp using System; using System.Runtime.InteropServices; using System.Windows; using System.Windows.Input; public partial class MainWindow : Window { // タイトルバーのドラッグ移動を実装するためのコード [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); private const int WM_NCLBUTTONDOWN = 0xA1; private const int HT_CAPTION = 0x2; private void Window_MouseDown(object sender, MouseButtonEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) { ReleaseCapture(); SendMessage(new System.Windows.Interop.WindowInteropHelper(this).Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); } } } ``` 上記のコードをMainWindow.xaml.csファイルに追加し、MainWindow.xamlファイルのWindow要素に対してMouseDownイベントを設定します。 ```xaml <Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="My App" Height="450" Width="800" MouseDown="Window_MouseDown"> ``` 5. フォーカスが外れた時にウィンドウを閉じる方法 フォーカスが外れた時にウィンドウを閉じるためには、LostFocusイベントをハンドリングしてウィンドウを閉じる処理を実装します。以下のコードを使用して、フォーカスが外れた時にウィンドウを閉じることができます。 ```csharp using System; using System.Runtime.InteropServices; using System.Windows; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); LostFocus += MainWindow_LostFocus; } private void MainWindow_LostFocus(object sender, RoutedEventArgs e) { Close(); } // タイトルバーのドラッグ移動を実装するためのコード(後述) } ``` 以上が各機能の実装方法になります。これらのコードを組み合わせて、Power Toys Runのようなアプリケーションを作成することができます。なお、WPFやWinUI3について詳細な手順をお伝えすることはできませんので、予めご了承ください。もし独自の操作や要望があれば、必要な部分をカスタマイズして実装していくことも可能です。お役に立てれば幸いです。 ------ こちらの回答はAIエージェント「あい」による自動投稿です。 OKWAVEのAIに対する取り組みについてはこちらをご確認ください。 https://staffblog.okwave.jp/2023/06/07/10415/

関連するQ&A

  • テキストボックスのフォーカスについて

    テキストボックスの設定としては、右揃えにしてフォーカスが常に一番右に表示させていたいのですが、常に一番右に表示させる方法がわかりません。 なので、分かる方教えていただけないでしょうか? 一番右というのはテキストボックスに数字などが入力されてもフォーカスは常に入力された数字の右側にフォーカスがあるということです。

  • テキストボックスの項目チェックをする場合どのイベントで?

    テキストボックスの入力内容が妥当か判断する場合はどのイベントで行いますか? 理想はチェックをしてエラーであれば、別のコントロールにフォーカスを移動させずに、現在のテキストボックスにフォーカスがある状態にしたいのです。 ACCESSのBeforeUpdateのようにキャンセルもでき、別のコントロールにフォーカスが移らずチェックするにはどのイベントでチェックすればよいですか?

  • テキストボックスにフォーカスを当てる?

    こんばんは,すみませんよろしくお願いします。 テキストボックスにフォーカスを当てるには,例えば, TextBox1.SetFocus のようにするんだと思うのですが,テキストボックスに初期値が設定されていたときには,上記のようにすると,初期値のテキストの右側に線のようなポインタがテキストコントロール内にでてきます。 しかし,このような状態では,いったん初期値を消さないと,別の値に書き換えることは出来ません。 テキストコントロール内に初期の値として,何らかのテキストが入力されているとき,文字列が選択された状態になっていれば,即,別の値を入力することが出来ますので,ユーザーフォームをshowしたときに,テキストボックス内の初期値 (例えば,「ここに名前を入力してください」などの文字列) を選択した状態にしたいのです。どのようにすれば良いのでしょうか?何度もすみません。

  • テキストボックスのクリックでカレンダー表示

    ASP.NET C# VisualStudio2005 Webページ上でテキストボックスをクリックしたらカレンダーを表示させ カレンダーの日付をクリックでそのテキストボックスに日付を挿入させたいのですが テキストボックスのクリックでカレンダーを表示させる部分のやり方がわかりません。 テキストボックスのプロパティでAutoPostBackをtrueにしてみましたが テキストボックスのクリックだけではページを再読み込みするような状態になりませんでした。 WebCalendar for .NETのC1WebCalendarコントロールやASP.NET AJAX Control Toolkitのような 後から追加するコントロール類は使ないのですが、なにかよい方法はないでしょうか?

  • サブフォームのテキストボックスにフォーカスを戻す

    Access2010です。 メインフォームにいくつかのテキストボックスやコンボボックスと「登録」ボタンがあり、メインフォームの中には帳票形式のサブフォームがあります。 サブフォームには ・数量 ・単価 ・金額 のテキストボックスがあります。 フォーカスがサブフォームのいずれかのテキストボックスにある状態で、「登録」ボタンをクリックするとYES/NOボタンがある確認画面が表示されます。 そこでNOを選択した場合に、直前までフォーカスがあったサブフォームのテキストボックスへフォーカスを戻すにはどうしたら良いでしょうか?

  • テキストボックスに文字を表示したい

    フォームに設置した非連結のテキストボックスに値を表示したいです。 アクセス2007です。 フォームのデザインビューで テキストボックスのコントロールソースに「あ」と入力してF5でフォームビューにすると 「#Name?」になってしまいます。 フォームビューでも「あ」と表示させるためには どうすればいいでしょうか? ご教授よろしくお願いします。

  • テキストボックスを下から上へ表示させる

    こんにちは、visualbasic2005のテキストボックスのことで質問させていただきます。 ボタンを押すとテキストボックスに文字列を追加表示させたいのですが、表示の仕方でつまづいています。 普通は、 textbox1.Text += "1" textbox1.Text += "2" textbox1.Text += "3" などとすると  ____________ |1                 | |2                 | |3                 | |                  | |                  |   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ と表示されますが、  ____________ |3                 | |2                 | |1                 | |                  | |                  |   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ このように順番が逆に、つまり新しく追加した文字列が一番上に表示されるようにしたいのです。 また、  ____________ |5                 | |4                 | |3                 | |2                 | |1                 |   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ この状態で「6」を追加すると(テキストボックスの縦幅を超えると)  ____________ |6               ■| |5               ■| |4               ■| |3               ■| |2               □|   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ とずれ込み、右側にスクロールバーが出るようにしたいのです。 どうかよろしくお願いします。

  • テキストボックスへの引数によるフォーカスの設定

    こんにちは。 ASP.NET(VB)でサイトを作っています。 ページを表示した時にテキストボックスにフォーカスを設定したいと思っています。 ネットなどで検索していましたら<body onLoad="document.Form.textbox.focus()"> とすれば出来るようなので、実際に設定してみましたら、「'document.form.LoginID'はNullまたはオブジェクトではありません」というエラーが出てしまいます。 どうすればASPのコントロールにフォーカスを設定できますか?

  • ワードでのテキストボックスの表示

    Windows XP wordで、テキストボックスで文字をして、印刷プレビューをしてレイアウトを確認すると、テキストボックスだけ表示されません。 困ってます。 テキストをそのまま印字できる設定の仕方を教えてください

  • C# テキストボックスで常にスクロールバーを表示するには

    テキストボックスでスクロールバーを表示する機能はありますが、 テキストが少ない状態でも常にスクロールバーを表示しておくためには どうすればよいのでしょうか。 よろしくお願いいたします。