tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルSplitContainerの拡張
記事No7156
投稿日: 2008/03/07(Fri) 15:52
投稿者ダンボ
SplitContainerでパネルの入替 - ダンボ 08/03/03-10:02 No.7110

の関連質問です。
SplitContainerの拡張要望をMSに出すってのはさておいて。

自分だけでもSplitContainerの拡張はできるし、それがオブジェクト指向言語の
良いところだと、下記のように拡張してみました。

Public Class ExSplitContainer
    Inherits SplitContainer
    Public Sub Invert()
        Dim CNT As Control = Me.Panel1.Controls(0)
        Me.Panel1.Controls.Add(Me.Panel2.Controls(0))
        Me.Panel2.Controls.Add(CNT)
    End Sub
End Class

まあコントロールは1つだけ必ずあると言う前提にしましたが、これを
プログラムで採用するには、現在使っているSplitContainerを取り払って
デザイナーでやっていたことをすべてコードでやらなければいけないんですよね?
(大変すぎる。。。拡張自体は簡単だったが)

[ツリー表示へ]
タイトルRe: SplitContainerの拡張
記事No7157
投稿日: 2008/03/07(Fri) 16:37
投稿者よねKEN
> まあコントロールは1つだけ必ずあると言う前提にしましたが、これを
> プログラムで採用するには、現在使っているSplitContainerを取り払って
> デザイナーでやっていたことをすべてコードでやらなければいけないんですよね?
> (大変すぎる。。。拡張自体は簡単だったが)

ソースファイル上でSplitContainerをExSplitContainerに置き換えればいけませんかね?
VS2003でやっていたときはそのように入れ替えてました。

ただしIDEを立ち上げている状態で行った場合、途中の段階で一時的にでも
ソースの整合性が取れなくなったりするとデザイナが整合性を取ろうとして、
例えば、Form上のコントロールが消えてしまったり、
デザイナ画面が赤い×になったりする場合がありました。
なので、IDE上でソースを置換する場合はデザイナはすべて閉じて処理するとか気をつけてやっていました。

VS2005でも同様にうまくいくかどうかは試さないとわかりませんが、
理論上は大丈夫なはずです。ので、ソリューション丸ごとバックアップは
取っておいて、試してみてもよいと思います。
#ただし、自己責任で

[ツリー表示へ]
タイトル[解決]SplitContainerの拡張
記事No7161
投稿日: 2008/03/07(Fri) 18:59
投稿者ダンボ
> ソースファイル上でSplitContainerをExSplitContainerに置き換えればいけませんかね?

よねKEN さん、どうも有り難うございます。
成功を確認できました。

このツールでSplitContainerを使っているのは唯一つだけのFormですので、その
.Designer.vbをテキストエディターを用いて、
 System.Windows.Forms.SplitContainerを
 ExSplitContainerに一括置換
の操作だけでOKでした。ExSplitContainerはコード部に定義しました。
.Designer.vbを編集するのならばこちらに書いてもいいかも知れませんね。

まあ、.Designer.vbには'コード エディタを使って変更しないでください。
と書いてはありますが「そんなの関係ねぇ」自己責任で。

[ツリー表示へ]