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

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

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

Re[15]: SplitContainerの分割線


(過去ログ 11 を表示中)

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

■2129 / inTopicNo.1)  SplitContainerの分割線
  
□投稿者/ K (5回)-(2007/03/20(Tue) 00:04:22)

分類:[.NET 全般] 

どうもお世話になっております。

2.0で追加されたSplitContainerの分割線ですが、
つかんでサイズ変更すると、分割バー上にドラッグ中のハーフトーンイメージ(?)
のようなものが残ってしまいます。
これは仕様なんでしょうか?

2.0以降はSplitterの代わりにSplitContainerを使えというお達しなのですが、
おかげで導入する気がおきません。

Splitterと同じ表示が欲しい場合、バー部分を自分で描画するしかないのでしょうか?
OnPaintオーバーライドかな。

引用返信 編集キー/
■2132 / inTopicNo.2)  Re[1]: SplitContainerの分割線
□投稿者/ Jitta (291回)-(2007/03/20(Tue) 07:41:48)
No2129 (K さん) に返信
> どうもお世話になっております。
>
> 2.0で追加されたSplitContainerの分割線ですが、
> つかんでサイズ変更すると、分割バー上にドラッグ中のハーフトーンイメージ(?)
> のようなものが残ってしまいます。
> これは仕様なんでしょうか?
>
> 2.0以降はSplitterの代わりにSplitContainerを使えというお達しなのですが、
> おかげで導入する気がおきません。
>
> Splitterと同じ表示が欲しい場合、バー部分を自分で描画するしかないのでしょうか?
> OnPaintオーバーライドかな。
>


再現していません。
描写ルーチンとか、いじっていませんか?
引用返信 編集キー/
■2149 / inTopicNo.3)  Re[2]: SplitContainerの分割線
□投稿者/ K (6回)-(2007/03/20(Tue) 23:06:51)
2007/03/20(Tue) 23:12:59 編集(投稿者)

ちょっと検索してみました。
以下の図1の右の縦スプリットが、同じように表示がおかしくなっています。
多分、私の環境だけではないと思うのですが・・・

http://itpro.nikkeibp.co.jp/article/COLUMN/20060926/249032/

SplitContainerのイベントもプロパティも全部デフォルトで、こうなります。
縦にしても横にしても、BoderStyleを変えても、Panelにコントロールを置いても一緒です。

私の環境ですが、バージョン情報を見ると以下の通りです。

Microsoft Visual Studio 2005
Version 8.0.50727.762 (SP.050727-7600)
Microsoft .NET Framework
Version 2.0.50727


// とりあえず、オーバーライドして無理やり正常に表示していますが・・・
public class SplitContainer2 : SplitContainer
{
protected override void OnPaint(PaintEventArgs e)
{
using (Brush brush = new SolidBrush(this.BackColor))
{
e.Graphics.FillRectangle(brush, e.ClipRectangle);
}
}
}
引用返信 編集キー/
■2150 / inTopicNo.4)  Re[3]: SplitContainerの分割線
□投稿者/ よねKEN (22回)-(2007/03/20(Tue) 23:54:50)
よねKEN さんの Web サイト
私の方でも試してみましたが、再現しました。

0. 新規プロジェクトを作成
1. SplitContainerを置いて特にプロパティはいじらず。
(2. 左、右に適当なコントロールを追加)
というように準備をして実行。

1.だけなら、最初から真ん中にハーフトーンのボーダー(※)が表示されている。
1.と2.なら、最初は正常な表示でスプリットのバーを操作した後には、やはりハーフトーンのボーダーが表示される。

※1 Kさん提示のURLで言うところのbutton1とRichTextBox1の間のチェッカーフラッグ模様の線
(http://itpro.nikkeibp.co.jp/article/COLUMN/20060926/249032/)

私の環境は、
Visual Basic 2005 Express Edition (Version 8.0.50727.762 (SP.050727-7600))
Windows XP pro SP2
です。

解決策じゃないですが、とりあえず再現したよ、ということで。

引用返信 編集キー/
■2151 / inTopicNo.5)  Re[4]: SplitContainerの分割線
□投稿者/ 中博俊 (992回)-(2007/03/21(Wed) 09:35:18)
中博俊 さんの Web サイト
フォーカス持ってるだけでしょ?
引用返信 編集キー/
■2152 / inTopicNo.6)  Re[5]: SplitContainerの分割線
□投稿者/ よねKEN (23回)-(2007/03/21(Wed) 10:59:01)
よねKEN さんの Web サイト
No2151 (中博俊 さん) に返信
> フォーカス持ってるだけでしょ?

なるほど、そのようですね。
SplitterMovedイベントで適当なコントロールのFocusメソッドを呼び出してみたら、問題なしでした。

とはいえ、explorerのようなペインを実現するためのコントロールとしては、
スプリッタのこの表示はうれしくないですね。
どちらかというと、フォーカスは元のコントロールに維持されたままというのが期待される動作だと思います。
#スプリッタの位置を変更するたびにフォーカスを取られたのでは困りますし。

Splitterコントロールで同様のことを行った場合は、こういうことにはなりませんね。

SplitterコントロールとSplitContainerコントロールで動作実験を行いましたが、
スプリッタをドラッグする瞬間に、
前者はフォーカスを取らないが、後者はフォーカスを取ってますね。

例えば、TextBoxを配置し、LeaveイベントとValidatingイベントを処理するように記述しておきます。
そして、実行時にTextBox入力中にスプリットを動かすと、
Splitterの場合は何も起こらず、SplitContainerの場合はTextBoxのLeaveイベントが起きます。
そして、フォーカスを元のTextBoxにFocusメソッドで強引に戻してやると
Validatingイベントが起きましたorz

SplitとSplitContainerで仕様が違うんだといってしまえばそれまでですが、
なんかSplitContainerいけてないですね・・・
引用返信 編集キー/
■2153 / inTopicNo.7)  Re[5]: SplitContainerの分割線
□投稿者/ Mr.T (23回)-(2007/03/21(Wed) 11:16:23)
Mr.Tです、こんにちは。

No2151 (中博俊 さん) に返信
> フォーカス持ってるだけでしょ?

私も試してみたんですが、そのようですね。
確認として、SplitterWidthを適当に大きくして動かしてみると
フォーカスだとわかります。
フォーカス移動なので、他のコントロールにフォーカスを移動すれば消えます。

SplitterMovedイベントで他のコントロールにフォーカスするとか、
SplitContainer1.Enabled=Falseの直後に
SplitContainer1.Enabled=True
にするとか他にもあるんでしょうけど、そこらへんはどうとでも
できますね。

環境:
Microsoft Visual Studio 2005
Version 8.0.50727.762 (SP.050727-7600)
Microsoft .NET Framework
Version 2.0.50727



引用返信 編集キー/
■2154 / inTopicNo.8)  Re[6]: SplitContainerの分割線
□投稿者/ K (7回)-(2007/03/21(Wed) 12:59:32)
No2151 (中博俊 さん) に返信
>フォーカス持ってるだけでしょ?

ありがとうございます。気づきませんでした。
どうも、OnPaintの中でわざわざFocus線を描画しているようです。
OnPaintをオーバーライドして何もしないだけで、Focus表示はなくなりました。

以下でとりあえず問題はなさそうですが、正直ちょっと使いづらいです。
1.TabStopをfalse
2.SplitterMovedイベントでフォーカスを他へ移動
(分割線のドラッグ以外で移動した場合もSplitterMovedイベントが発生してしまう模様)

Splitterと同じようにサイズ変更しても元のフォーカスを維持したいのですが、うまくいきません。
OnCreateControlをオーバーライドしてSelectableスタイルをfalseにしたのですが、フォーカスを受け取ってしまいます。

protected override void OnCreateControl()
{
base.OnCreateControl();
this.SetStyle(ControlStyles.Selectable, false);
}



引用返信 編集キー/
■2155 / inTopicNo.9)  Re[7]: SplitContainerの分割線
□投稿者/ 中博俊 (993回)-(2007/03/21(Wed) 13:26:43)
中博俊 さんの Web サイト
中身を見ていないけど、SplitterContainerはSplitterで且コンテナなので、フォーカスを持つのは仕方がないような気がします。
あとはWindows Messageの深い地獄へ行けるかも(^^
引用返信 編集キー/
■2157 / inTopicNo.10)  Re[8]: SplitContainerの分割線
□投稿者/ K (8回)-(2007/03/21(Wed) 14:37:07)
サイズ変更する前にフォーカスを持ったコントロールを記憶しておいて、
変更後にフォーカスを当て直せば、とか考えてたらまんまなサンプルを見つけました。
ここまでするなら、おとなしくSplitterで妥協した方がいいかもしれません。

http://www.dotnetmonitor.com/SplitContainerFAQ/how-can-i-prevent-the-splitcontainer-from-stealing-focus-.html
解決済み
引用返信 編集キー/
■2160 / inTopicNo.11)  Re[9]: SplitContainerの分割線
□投稿者/ 中博俊 (994回)-(2007/03/22(Thu) 09:11:09)
中博俊 さんの Web サイト
アクセシビリティ的にキーボードだけですべての操作はできるべきで、そういう意味でもフォーカスは持つべきと判断していますけど・・・
見せたくないってのもどうかと思いますけど、まぁまだ容認できるとして、フォーカスが持てないとどうしようもないですよね?

引用返信 編集キー/
■2167 / inTopicNo.12)  Re[10]: SplitContainerの分割線
□投稿者/ Hirotow (78回)-(2007/03/22(Thu) 13:54:25)
Hirotow さんの Web サイト
No2160 (中博俊 さん) に返信
> アクセシビリティ的にキーボードだけですべての操作はできるべきで、そういう意味でもフォーカスは持つべきと判断していますけど・・・
> 見せたくないってのもどうかと思いますけど、まぁまだ容認できるとして、フォーカスが持てないとどうしようもないですよね?
>

キーボードでの操作ならグローバルショートカットでもかまわないと思うのですがどうでしょう。(実装は大変ですが)
引用返信 編集キー/
■2172 / inTopicNo.13)  Re[11]: SplitContainerの分割線
□投稿者/ K (9回)-(2007/03/22(Thu) 23:08:23)
キーボードで分割バーを操作するということでしょうか?
個人的には、Ctrl+Tabとかで各ペインを行ったり来たりできれば、十分かなと思ってたんですが。

今後、フォーカスを持った分割UIが標準になってくれば、慣れてしまうのかもしれません。
最近は、Officeで採用されたとたん、新しいUIが標準みたいになってますし。
引用返信 編集キー/
■2173 / inTopicNo.14)  Re[12]: SplitContainerの分割線
□投稿者/ Jitta (292回)-(2007/03/23(Fri) 07:23:50)
跡が残ると勘違いしてた。あんど、気にしたことなかった。すみません

私も、スプリッターがフォーカスをとる必要はないと思うなぁ。CTRL+アロー キー とかで変更できれば十分かと。

オルカにウィッシュ上げる?
引用返信 編集キー/
■2174 / inTopicNo.15)  Re[13]: SplitContainerの分割線
□投稿者/ 中博俊 (995回)-(2007/03/23(Fri) 09:13:10)
中博俊 さんの Web サイト
縦分割、横分割、縦分割ってしたときにショートカットのシナリオでは破たんするので反対です。
WPFにはすぷりったねぇですねぇ
ちなみにVistaではおそらく点線という意味のフォーカスはないでしょう。(未確認)
引用返信 編集キー/
■2178 / inTopicNo.16)  Re[14]: SplitContainerの分割線
□投稿者/ 渋木宏明(ひどり) (158回)-(2007/03/23(Fri) 11:36:57)
渋木宏明(ひどり) さんの Web サイト
> WPFにはすぷりったねぇですねぇ

HTML で言う、フレームみたいのはありませんでしたっけ?

引用返信 編集キー/
■2185 / inTopicNo.17)  Re[14]: SplitContainerの分割線
□投稿者/ Jitta (293回)-(2007/03/23(Fri) 21:50:02)
No2174 (中博俊 さん) に返信
> 縦分割、横分割、縦分割ってしたときにショートカットのシナリオでは破たんするので反対です。

フォーカスをもっているコントロールを…あ…破綻した(^_^;)
引用返信 編集キー/
■2186 / inTopicNo.18)  Re[15]: SplitContainerの分割線
□投稿者/ K (10回)-(2007/03/23(Fri) 22:05:43)
結局、フォーカスはあまり気にしないことにして、SplitContainerを一部採用しました。
間単にシングルペインに切り替えれるのが決め手。
Splitterだと面倒なので。

> 跡が残ると勘違いしてた。あんど、気にしたことなかった。すみません
私も最初は残像だと思ってました。
元の位置に重ねてドロップすると、重なった部分のフォーカスの点線は消えるし。
フォーカスの要・不要は状況にもよると思うので、個人的には切り替えれると嬉しいです。

> ちなみにVistaではおそらく点線という意味のフォーカスはないでしょう。(未確認)
テスト用のVPCで確認してみました。
エクスプローラのフォーカスは相変わらず点線でした・・・
引用返信 編集キー/
■2190 / inTopicNo.19)  Re[15]: SplitContainerの分割線
□投稿者/ 中博俊 (997回)-(2007/03/24(Sat) 23:56:34)
中博俊 さんの Web サイト
みてちょーだい
http://blogs.wankuma.com/naka/archive/2007/03/24/68857.aspx
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -