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

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

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

Re[3]: AutoScrollの位置が勝手にリセットされてしまう


(過去ログ 62 を表示中)

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

■35623 / inTopicNo.1)  AutoScrollの位置が勝手にリセットされてしまう
  
□投稿者/ parco (1回)-(2009/05/11(Mon) 17:24:42)

分類:[.NET 全般] 

質問させてください。

開発環境はVisualStudio.NET2003/2008を使用しています(どちらでも同じ現象が起こります)。
仕様言語はC#です(言語特有の問題ではないので、分類は「.NET 全般」とさせていただきました)。

AutoScrollをtrueにしたフォーム上に、
UserControlクラスから派生したコントロールを追加します。

this.AutoScroll = true;

UserControl1 control = new UserControl1();
control.Visible = true;
control.Location = new Point(0, 0);
control.Size = new Size(1024, 1024);
control.BackColor = Color.Red;
this.Controls.Add(control);

フォームを表示して、適当にスクロールした後、
ウィンドウからフォーカスを外し、再びフォーカスすると、
スクロール位置が(0, 0)に戻ってしまいます。

スクロール位置がリセットしないようにするには、どうすればいいのでしょうか。。。
よろしくお願いしますm(__)m
引用返信 編集キー/
■35705 / inTopicNo.2)  Re[1]: AutoScrollの位置が勝手にリセットされてしまう
□投稿者/ biac (94回)-(2009/05/12(Tue) 17:27:42)
biac さんの Web サイト
No35623 (parco さん) に返信
> フォームを表示して、適当にスクロールした後、
> ウィンドウからフォーカスを外し、再びフォーカスすると、
> スクロール位置が(0, 0)に戻ってしまいます。

あら、 ほんとですねぇ。
下記のコードで確認できました。

MSDN フォーラムを探してみると…
http://social.msdn.microsoft.com/Forums/ja-JP/winforms/thread/285b1a48-ce21-47ea-80bf-5601d6014cf7
http://social.msdn.microsoft.com/Forums/ja-JP/winforms/thread/437437c8-9548-4e68-8f17-356f848f379d
…オートスクロールさせているコンテナ  ( この場合は Form1 ) の ScrollToControl() メソッドをオーバライドして
やれば良いそうです。 ( 下記コードのコメントアウト部分 )

※ ただしこれは .NET Framework 2.0 以降の話です。 1.x ではどうすればいいのか分かりません。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private UserControl _uc = new UserControl();

    private void Form1_Load(object sender, EventArgs e)
    {
        this.AutoScroll = true;

        _uc.Visible = true;
        _uc.Location = new Point(0, 0);
        _uc.Size = new Size(1024, 1024);
        _uc.BackColor = Color.Red;
        this.Controls.Add(_uc);
    }

    //protected override Point ScrollToControl(Control activeControl)
    //{
    //    return this.AutoScrollPosition;
    //}
}

引用返信 編集キー/
■35706 / inTopicNo.3)  Re[2]: AutoScrollの位置が勝手にリセットされてしまう
□投稿者/ parco (2回)-(2009/05/12(Tue) 17:52:20)
2009/05/12(Tue) 17:54:13 編集(投稿者)

No35623 (biac さん) に返信

>biacさま
お答えありがとうございますm(__)m

2.0以降には、ScrollToControlというメソッドがあったのですね。
試してみたいと思います。

いろいろやってみまして、なんとかスクロール位置を維持することができるようになりました。
UserControlのPaint時にAutoScrollPositionを保存し、UserControlのフォーカス時とフォームのサイズ変更時に
保存した値を設定するというものです。

ずいぶん無理やりな方法だと思いますし、実際一瞬スクロールのつまみが(0, 0)に戻ってしまいます。
とても満足といえる方法ではなさそうです。。。

biacさまの方法を試してみます。
ありがとうございました。

上手くいったらまた報告させていただきます^^
引用返信 編集キー/
■35709 / inTopicNo.4)  Re[3]: AutoScrollの位置が勝手にリセットされてしまう
□投稿者/ parco (3回)-(2009/05/12(Tue) 19:23:48)
No35623 (biac さん) に返信

>biacさま

ScrollToControlを試してみたところ、全て上手くいきました!!

.NET1.1は切捨てる方向で考えようと思います;

これで解決とさせていただきます。
ありがとうございましたm(__)m

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -