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

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

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

Re[4]: Buttonのフォーカス?表示を維持するには


(過去ログ 170 を表示中)

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

■98291 / inTopicNo.1)  Buttonのフォーカス?表示を維持するには
  
□投稿者/ ゆい (11回)-(2021/10/28(Thu) 19:41:45)

分類:[VB.NET/VB2005 以降] 

VB2017です。
Button1、Button2、RadioButton1があったとします。
Button1もしくはButton2をクリックすればフォーカスと言うのでしょうか?
枠が付いて表示もされますよね。
そこでRadioButton1をクリックすればその枠も消えてしまいます。
消えなくするにはどうすれば良いのでしょうか?
簡単に出来る方法がありましたらよろしくお願いします。
引用返信 編集キー/
■98292 / inTopicNo.2)  Re[1]: Buttonのフォーカス?表示を維持するには
□投稿者/ 魔界の仮面弁士 (3201回)-(2021/10/28(Thu) 20:12:26)
No98291 (ゆい さん) に返信
> 消えなくするにはどうすれば良いのでしょうか?

RadioButton を継承し、SetStyle メソッドで Selectable を False にします。

Public Class NonSelectableRadioButton
 Inherits RadioButton
 Public Sub New()
  SetStyle(ControlStyles.Selectable, False)
 End Sub
End Class
引用返信 編集キー/
■98293 / inTopicNo.3)  Re[2]: Buttonのフォーカス?表示を維持するには
□投稿者/ 魔界の仮面弁士 (3202回)-(2021/10/28(Thu) 20:21:34)
No98292 (魔界の仮面弁士) に追記
> ■No98291 (ゆい さん) に返信
>>消えなくするにはどうすれば良いのでしょうか?
> RadioButton を継承し、SetStyle メソッドで Selectable を False にします。


何らかの事情で、継承コントロールを利用できない場合には、
リフレクションで無理矢理設定するという手段もあります。

Imports System.Reflection
Public Class Form1
 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  ForceSetStyle(RadioButton1, ControlStyles.Selectable, False)
  ForceSetStyle(RadioButton2, ControlStyles.Selectable, False)
  ForceSetStyle(RadioButton3, ControlStyles.Selectable, False)
 End Sub

 Public Sub ForceSetStyle(target As Control, stlye As ControlStyles, value As Boolean)
  target.GetType().InvokeMember("SetStyle", BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, target, New Object() {stlye, value})
 End Sub
End Class


いずれにせよ、直接的にフォーカスを得られなくなるため、
キーボードでの選択ができなくなるという制限がつきます。
引用返信 編集キー/
■98294 / inTopicNo.4)  Re[3]: Buttonのフォーカス?表示を維持するには
□投稿者/ ゆい (12回)-(2021/10/28(Thu) 22:29:16)
No98293 (魔界の仮面弁士 さん) に返信

すみません。
RadioButton1での操作が終わった時点で、Button1もしくはButton2に、枠が付いて表示がされていればいいのです。
Button1もしくはButton2にクリックはせずに、プログラム上にて同じ作用を施すことはできないのでしょうか?

引用返信 編集キー/
■98295 / inTopicNo.5)  Re[2]: Buttonのフォーカス?表示を維持するには
□投稿者/ ゆい (13回)-(2021/10/28(Thu) 22:38:34)
No98292 (魔界の仮面弁士 さん) に返信

ありがとうございます。
これはどこに書くのですか?

> RadioButton を継承し、SetStyle メソッドで Selectable を False にします。
>
> Public Class NonSelectableRadioButton
>  Inherits RadioButton
>  Public Sub New()
>   SetStyle(ControlStyles.Selectable, False)
>  End Sub
> End Class
引用返信 編集キー/
■98296 / inTopicNo.6)  Re[3]: Buttonのフォーカス?表示を維持するには
□投稿者/ WebSurfer (2371回)-(2021/10/28(Thu) 23:14:37)
どうして何の(WinForms? WPF? ASP.NET Web Forms? html? その他?)Button かが分かって
回答できるんでしょう? 不思議です。わんくまメンバー間で別途メールとか Face-to-face
でやり取りできる?

引用返信 編集キー/
■98297 / inTopicNo.7)  Re[4]: Buttonのフォーカス?表示を維持するには
□投稿者/ KOZ (163回)-(2021/10/29(Fri) 09:56:43)
No98294 (ゆい さん) に返信
> RadioButton1での操作が終わった時点で、Button1もしくはButton2に、枠が付いて表示がされていればいいのです。

なんとなくですが、トグルボタンを使うといいのではないかと感じます。
RadioButton や、CheckBox の Appearance プロパティを Button にすると、トグルボタンになります。

【使用例】
http://hiros-dot.net/CS2005/Control/RadioButton/RadioButton01.htm

引用返信 編集キー/
■98299 / inTopicNo.8)  Re[1]: Buttonのフォーカス?表示を維持するには
□投稿者/ furu (143回)-(2021/10/29(Fri) 10:34:20)
No98291 (ゆい さん) に返信
> 簡単に出来る方法がありましたらよろしくお願いします。
フォーカスのあったボタンを覚えておいて
ラジオボタンの処理が終わったら
フォーカスを戻してはどうでしょうか?

Dim ActiveButton As Button

Private Sub Button1_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles Button1.Validating, Button2.Validating
    If TypeOf ActiveControl Is RadioButton Then
        ActiveButton = sender
    End If
End Sub

Private Sub RadioButton1_Click(sender As Object, e As EventArgs) Handles RadioButton2.Click, RadioButton1.Click
    If Not (ActiveButton Is Nothing) Then
        ActiveButton.Focus()
        ActiveButton = Nothing
    End If
End Sub

引用返信 編集キー/
■98301 / inTopicNo.9)  Re[2]: Buttonのフォーカス?表示を維持するには
□投稿者/ ゆい (14回)-(2021/10/29(Fri) 20:34:16)
No98299 (furu さん) に返信

ありがとうございます。
これがピッタリのような気がします。

ラジオボタン(RadioButton1、RadioButton1)と同様なことが、
ボタン(Button3)でも出来るのでしょうか?

即ち、RadioButton1、RadioButton1、Button3のどれかが押されてもです。


> フォーカスのあったボタンを覚えておいて
> ラジオボタンの処理が終わったら
> フォーカスを戻してはどうでしょうか?
>
> Dim ActiveButton As Button
>
> Private Sub Button1_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles Button1.Validating, Button2.Validating
> If TypeOf ActiveControl Is RadioButton Then
> ActiveButton = sender
> End If
> End Sub
>
> Private Sub RadioButton1_Click(sender As Object, e As EventArgs) Handles RadioButton2.Click, RadioButton1.Click
> If Not (ActiveButton Is Nothing) Then
> ActiveButton.Focus()
> ActiveButton = Nothing
> End If
> End Sub
引用返信 編集キー/
■98302 / inTopicNo.10)  Re[3]: Buttonのフォーカス?表示を維持するには
□投稿者/ furu (144回)-(2021/10/29(Fri) 20:45:56)
No98301 (ゆい さん) に返信
> ラジオボタン(RadioButton1、RadioButton1)と同様なことが、
> ボタン(Button3)でも出来るのでしょうか?
> 
> 即ち、RadioButton1、RadioButton1、Button3のどれかが押されてもです。
処理としては同じです。

Dim ActiveButton As Button
Private Sub RadioButton1_Click(sender As Object, e As EventArgs) Handles RadioButton2.Click, RadioButton1.Click, Button3.Click
    If Not (ActiveButton Is Nothing) Then
        ActiveButton.Focus()
        ActiveButton = Nothing
    End If
End Sub

Private Sub Button1_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles Button1.Validating, Button2.Validating
    If TypeOf ActiveControl Is RadioButton Or ActiveControl Is Button3 Then
        ActiveButton = sender
    End If
End Sub

引用返信 編集キー/
■98303 / inTopicNo.11)  Re[4]: Buttonのフォーカス?表示を維持するには
□投稿者/ ゆい (15回)-(2021/10/29(Fri) 23:47:10)
No98302 (furu さん) に返信

ありがとうございました。
希望してたようになりました。
また教えてくださいね。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -