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

わんくま同盟

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

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


(過去ログ 129 を表示中)
■76306 / )  Re[1]: C#で子要素でのホイールイベントを親要素に渡したい
□投稿者/ 魔界の仮面弁士 (385回)-(2015/06/22(Mon) 21:02:42)
No76299 (ランディ さん) に返信
> ユーザーコントロールを並べて行くと下方向が画面外に行くため当然スクロールバーが出現します。

既定の設定では、スクロールバーは出ないと思います。
AutoScroll プロパティをお使いでしょうか?



> FLPに上記の処理をしてやるとユーザーコントロール外のFLPの余白みたいな所ではホイールがちゃんと反応してスクロールしました。
> ですがユーザーコントロール上でホイールすると(考えれば当然なんですが)スクロールしない訳です。
> ユーザーコントロール自体ではホイール操作までは関知できるとは思うのですが、そのあとそれをどうFLP側に伝えたら良いでしょうか?

提示頂いた『上記の処理』の URL はまだ見ていないのですが、
たとえば、こういう感じで処理できないでしょうか。

public partial class Form1 : Form
{
    Button dummyButton = new Button();
    TextBox dummyTextBox = new TextBox();

    FLP flp = new FLP();
    public Form1()
    {
        InitializeComponent();

        flp.AutoScroll = true;
        flp.Dock = DockStyle.Fill;
        flp.Padding = new Padding(3, 1, 3, 1);
        for (int i = 1; i < 250; i++)
        {
            UserControl item = new UserControl() {
                Size = new Size(180, 25)
                , BorderStyle = BorderStyle.Fixed3D
                , BackColor = Color.FromArgb(255, 128, 255-i, i)
                , Margin = new Padding(0)
            };
            flp.Controls.Add(item);
        }
        this.Controls.Add(flp);
        
        dummyButton.Dock = DockStyle.Top;
        Controls.Add(dummyButton);

        dummyTextBox.Dock = DockStyle.Top;
        Controls.Add(dummyTextBox);

        ActiveControl = dummyTextBox;

        this.MouseWheel += Form1_MouseWheel;
    }

    void Form1_MouseWheel(object sender, MouseEventArgs e)
    {
        flp.NoticeWheele(flp,e);
    }

    private class FLP : FlowLayoutPanel
    {
        protected override void OnControlAdded(ControlEventArgs e)
        {
            base.OnControlAdded(e);
            UserControl uc = e.Control as UserControl;
            if (uc != null)
            {
                uc.MouseWheel += NoticeWheele;
            }
        }

        protected override void OnControlRemoved(ControlEventArgs e)
        {
            UserControl uc = e.Control as UserControl;
            if (uc != null)
            {
                uc.MouseWheel -= NoticeWheele;
            }
            base.OnControlRemoved(e);
        }

        public void NoticeWheele(object sender, MouseEventArgs e)
        {
            base.OnMouseWheel(e);
        }
    }
}

返信 編集キー/


管理者用

- Child Tree -