掲示板
  .NET開発  > アドバンスド.NET  > 4分割スプリットのやり方  
 
 
 投稿者 スレッド: 4分割スプリットのやり方
オノデラ はオフラインです。最後に活動した時刻: 2006/02/23 22:03:25 オノデラ
参加日: 2005-12-18
投稿数: 30
 
4分割スプリットのやり方
投稿日時: 2005-12-28 午後 12:14
MFC などでは最初からスプリットで4分割画面を構成できたのですが、
.NET Framework ではどのように実現したらいいのでしょうか?

Visual C# 2005 を使用していて、スプリットは基本的に splitContainer を使用しています。

例えば最初に垂直バーのスプリットコンテナを入れて、そのあと、両パネルに水平バーの
スプリットコンテナを入れてもお互いにバーが同期しないので困っています。

オリジナルのコントロールを作成するしかないのでしょうか?
red_fox63 はオフラインです。最後に活動した時刻: 2006/03/22 1:29:30 red_fox63
Top 50 Poster
参加日: 2003-7-17
投稿数: 170
 
Re: 4分割スプリットのやり方
投稿日時: 2005-12-28 午後 3:47
どのSplitterがクリックされたかの判断と SplitterMoving/SplitterMovedを工夫すれば
可能なようです

Splitter2/Splitter3が対象であるとするならば
Formレベルで どのSplitterがクリックされたのかを記憶する変数を用意します
    int nSplitter;

Private void splitter2_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
    nSpltter = 2;
}

Private void splitter3_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
    nSpltter = 3;
}

private void splitter2_SplitterMoving(object sender, System.Windows.Forms.SplitterEventArgs e)
{
    if ( nSplitter !=2 )
        return;
    splitter3.SplitPosition = splitter2.SplitPosition;
}

private void splitter3_SplitterMoved(object sender, System.Windows.Forms.SplitterEventArgs e)
{
    if ( nSplitter !=2 )
        return;
    splitter3.SplitPosition = splitter2.SplitPosition;
    nSplitter = 0;
}

private void splitter3_SplitterMoving(object sender, System.Windows.Forms.SplitterEventArgs e)
{
    if ( nSplitter !=3 )
        return;
    splitter2.SplitPosition = splitter3.SplitPosition;
}

private void splitter3_SplitterMoved(object sender, System.Windows.Forms.SplitterEventArgs e)
{
    if ( nSplitter !=3 )
        return;
    splitter2.SplitPosition = splitter3.SplitPosition;
    nSplitter = 0;
}


といった具合でどうでしょう
オノデラ はオフラインです。最後に活動した時刻: 2006/02/23 22:03:25 オノデラ
参加日: 2005-12-18
投稿数: 30
 
Re: 4分割スプリットのやり方
投稿日時: 2005-12-28 午後 4:00
返信ありがとうございます。

私もこのような処理は少し考えていたのですが、
ちょうど水平バーと垂直バーの交差部分をドラッグするときに
同時に移動させることが出来ないという部分に引っかかっています。

一応今考えているのは、親のバーを MouseMove で常に子のバーの位置を
監視して、ちょうど重なったところでマウスカーソルを変えるなり、フラグ立てるなどして
移動させることを考えています。

他にいい方法があるとか、最初から4分割スプリットがあるなど
何かあればお願いします。
red_fox63 はオフラインです。最後に活動した時刻: 2006/03/22 1:29:30 red_fox63
Top 50 Poster
参加日: 2003-7-17
投稿数: 170
 
Re: 4分割スプリットのやり方
投稿日時: 2005-12-29 午前 1:39
ご投稿のように 垂直(または水平)スプリッタなどで 他方の重なる部分の監視といった方向が現実的でしょう

MFCの分割ウィンドウは C#で言うところの Formレベルでの実現です
Formを MDIにして作成して 自前の処理をいくつか追加しているようです

縦横のスクロールのコントロールや 現在のどのペインがアクティブなのかなど ...
MFCのソースの winsplit.cppなどを調べてみるといったことをしてみてください

標準的なインストールパスなら
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\src
になると思います

確かインストール時のオプションで指定しないとインストールされていないはずですが ...
オノデラ はオフラインです。最後に活動した時刻: 2006/02/23 22:03:25 オノデラ
参加日: 2005-12-18
投稿数: 30
 
Re: 4分割スプリットのやり方
投稿日時: 2005-12-29 午後 12:41
やっぱり標準では4分割は無いようですね。

何とか自前で実装してみたいと思います。
いろいろありがとうございました。
 
Page 1 of 1
 
GotDotNet Japan 掲示板  > .NET開発  > アドバンスド.NET  > 4分割スプリットのやり方