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

わんくま同盟

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

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

ツリー一括表示

Buttonのフォーカス?表示を維持するには /ゆい (21/10/28(Thu) 19:41) #98291
Re[1]: Buttonのフォーカス?表示を維持するには /魔界の仮面弁士 (21/10/28(Thu) 20:12) #98292
│├ Re[2]: Buttonのフォーカス?表示を維持するには /魔界の仮面弁士 (21/10/28(Thu) 20:21) #98293
││└ Re[3]: Buttonのフォーカス?表示を維持するには /ゆい (21/10/28(Thu) 22:29) #98294
││  └ Re[4]: Buttonのフォーカス?表示を維持するには /KOZ (21/10/29(Fri) 09:56) #98297
│└ Re[2]: Buttonのフォーカス?表示を維持するには /ゆい (21/10/28(Thu) 22:38) #98295
│  └ Re[3]: Buttonのフォーカス?表示を維持するには /WebSurfer (21/10/28(Thu) 23:14) #98296
Re[1]: Buttonのフォーカス?表示を維持するには /furu (21/10/29(Fri) 10:34) #98299
  └ Re[2]: Buttonのフォーカス?表示を維持するには /ゆい (21/10/29(Fri) 20:34) #98301
    └ Re[3]: Buttonのフォーカス?表示を維持するには /furu (21/10/29(Fri) 20:45) #98302
      └ Re[4]: Buttonのフォーカス?表示を維持するには /ゆい (21/10/29(Fri) 23:47) #98303 解決済み


親記事 / ▼[ 98292 ] ▼[ 98299 ]
■98291 / 親階層)  Buttonのフォーカス?表示を維持するには
□投稿者/ ゆい (11回)-(2021/10/28(Thu) 19:41:45)

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

VB2017です。
Button1、Button2、RadioButton1があったとします。
Button1もしくはButton2をクリックすればフォーカスと言うのでしょうか?
枠が付いて表示もされますよね。
そこでRadioButton1をクリックすればその枠も消えてしまいます。
消えなくするにはどうすれば良いのでしょうか?
簡単に出来る方法がありましたらよろしくお願いします。
[ □ Tree ] 返信 編集キー/

▲[ 98291 ] / ▼[ 98293 ] ▼[ 98295 ]
■98292 / 1階層)  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
[ 親 98291 / □ Tree ] 返信 編集キー/

▲[ 98292 ] / ▼[ 98294 ]
■98293 / 2階層)  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


いずれにせよ、直接的にフォーカスを得られなくなるため、
キーボードでの選択ができなくなるという制限がつきます。
[ 親 98291 / □ Tree ] 返信 編集キー/

▲[ 98293 ] / ▼[ 98297 ]
■98294 / 3階層)  Re[3]: Buttonのフォーカス?表示を維持するには
□投稿者/ ゆい (12回)-(2021/10/28(Thu) 22:29:16)
No98293 (魔界の仮面弁士 さん) に返信

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

[ 親 98291 / □ Tree ] 返信 編集キー/

▲[ 98294 ] / 返信無し
■98297 / 4階層)  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

[ 親 98291 / □ Tree ] 返信 編集キー/

▲[ 98292 ] / ▼[ 98296 ]
■98295 / 2階層)  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
[ 親 98291 / □ Tree ] 返信 編集キー/

▲[ 98295 ] / 返信無し
■98296 / 3階層)  Re[3]: Buttonのフォーカス?表示を維持するには
□投稿者/ WebSurfer (2371回)-(2021/10/28(Thu) 23:14:37)
どうして何の(WinForms? WPF? ASP.NET Web Forms? html? その他?)Button かが分かって
回答できるんでしょう? 不思議です。わんくまメンバー間で別途メールとか Face-to-face
でやり取りできる?

[ 親 98291 / □ Tree ] 返信 編集キー/

▲[ 98291 ] / ▼[ 98301 ]
■98299 / 1階層)  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

[ 親 98291 / □ Tree ] 返信 編集キー/

▲[ 98299 ] / ▼[ 98302 ]
■98301 / 2階層)  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
[ 親 98291 / □ Tree ] 返信 編集キー/

▲[ 98301 ] / ▼[ 98303 ]
■98302 / 3階層)  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

[ 親 98291 / □ Tree ] 返信 編集キー/

▲[ 98302 ] / 返信無し
■98303 / 4階層)  Re[4]: Buttonのフォーカス?表示を維持するには
□投稿者/ ゆい (15回)-(2021/10/29(Fri) 23:47:10)
No98302 (furu さん) に返信

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

解決済み
[ 親 98291 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -