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

わんくま同盟

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

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

ツリー一括表示

カスタムコントロールにスクロールバーを表示する方法。 /Take (18/06/21(Thu) 17:14) #87706
Re[1]: カスタムコントロールにスクロールバーを表示する方法。 /shu (18/06/21(Thu) 17:27) #87707
Re[1]: カスタムコントロールにスクロールバーを表示する方法。 /魔界の仮面弁士 (18/06/22(Fri) 09:36) #87711
Re[1]: カスタムコントロールにスクロールバーを表示する方法。 /魔界の仮面弁士 (18/06/22(Fri) 12:38) #87714
  └ Re[2]: カスタムコントロールにスクロールバーを表示する方法。 /Take (18/06/29(Fri) 15:36) #87781 解決済み


親記事 / ▼[ 87707 ] ▼[ 87711 ] ▼[ 87714 ]
■87706 / 親階層)  カスタムコントロールにスクロールバーを表示する方法。
□投稿者/ Take (1回)-(2018/06/21(Thu) 17:14:34)

分類:[C#] 

2018/06/21(Thu) 17:18:15 編集(投稿者)

C# .NetFramework 3.5

カスタムコントロール(Controlクラスを継承しています)を作成し、
OnPaint() で画面を描画しています。

ここに縦横にスクロールバーを表示したいのですが、
どうやって表示させたらいいでしょうか?

HScrollBar を new して Location と Size を指定しても表示されません。


OnPaintは下記の様な事をしています。

protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);

Bitmap bmp = new Bitmap(this.Size.Width, this.Size.Height);
Graphics grp = Graphics.FromImage(bmp);

色々と描画

pe.Graphics.DrawImage(bmp, new Point(0, 0));
}



以上、よろしくお願いします。
[ □ Tree ] 返信 編集キー/

▲[ 87706 ] / 返信無し
■87707 / 1階層)  Re[1]: カスタムコントロールにスクロールバーを表示する方法。
□投稿者/ shu (1123回)-(2018/06/21(Thu) 17:27:02)
No87706 (Take さん) に返信

コントロールが2つ以上の場合、
UserControlにした方がよいです。

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

▲[ 87706 ] / 返信無し
■87711 / 1階層)  Re[1]: カスタムコントロールにスクロールバーを表示する方法。
□投稿者/ 魔界の仮面弁士 (1719回)-(2018/06/22(Fri) 09:36:02)
No87706 (Take さん) に返信
> カスタムコントロール(Controlクラスを継承しています)を作成し、
> OnPaint() で画面を描画しています。
> ここに縦横にスクロールバーを表示したいのですが、
> どうやって表示させたらいいでしょうか?


using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace Example
{
  public partial class UserControl1 : UserControl
  {
    public UserControl1()
    {
      InitializeComponent();
      DoubleBuffered = true;
      AutoScroll = true;
      var dummy = new Control();
      dummy.TabStop = false;
      dummy.TabIndex = int.MaxValue;
      dummy.SetBounds(3000, 3000, 0, 0);
      Controls.Add(dummy);
    }

    protected override void OnScroll(ScrollEventArgs se)
    {
      base.OnScroll(se);
      Invalidate();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
      var bounds = new Rectangle(AutoScrollPosition, new Size(3000, 3000));
      using (var gb = new LinearGradientBrush(bounds,
        Color.LemonChiffon, Color.Blue, LinearGradientMode.ForwardDiagonal))
      {
        e.Graphics.FillRectangle(gb, bounds);
      }
      base.OnPaint(e);
    }
  }
}
[ 親 87706 / □ Tree ] 返信 編集キー/

▲[ 87706 ] / ▼[ 87781 ]
■87714 / 1階層)  Re[1]: カスタムコントロールにスクロールバーを表示する方法。
□投稿者/ 魔界の仮面弁士 (1720回)-(2018/06/22(Fri) 12:38:43)
No87706 (Take さん) に返信
> protected override void OnPaint(PaintEventArgs pe)
> {
>  base.OnPaint(pe);
>  Bitmap  bmp = new Bitmap(this.Size.Width, this.Size.Height);
>  Graphics grp = Graphics.FromImage(bmp);
>  色々と描画
>  pe.Graphics.DrawImage(bmp, new Point(0, 0));
> }

Bitmap や Graphics の解放が漏れていませんか?

using(Bitmap bmp = new Bitmap(this.Size.Width, this.Size.Height))
using(Graphics grp = Graphics.FromImage(bmp))
{
 色々と描画
 pe.Graphics.DrawImage(bmp, new Point(0, 0));
}


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

▲[ 87714 ] / 返信無し
■87781 / 2階層)  Re[2]: カスタムコントロールにスクロールバーを表示する方法。
□投稿者/ Take (2回)-(2018/06/29(Fri) 15:36:18)
shu様、魔界の仮面弁士様

UserControlにすることで
無事スクロールバーを表示する事ができました。

返事とお礼が遅くなてしまい申し訳ありませんでした。

助かりました。
ありがとうございます。

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


管理者用

- Child Tree -