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

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

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

Re[2]: C#で子要素でのホイールイベントを親要素に渡したい


(過去ログ 129 を表示中)

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

■76299 / inTopicNo.1)  C#で子要素でのホイールイベントを親要素に渡したい
  
□投稿者/ ランディ (1回)-(2015/06/21(Sun) 21:21:10)

分類:[C#] 

2015/06/21(Sun) 21:21:41 編集(投稿者)
2015/06/21(Sun) 21:21:36 編集(投稿者)

https://social.msdn.microsoft.com/Forums/ja-JP/a121e807-50ad-4777-b218-2c82ed62742c

上記を参照してグリッドがアクティブで無い時でもホイールでスクロールさせる動作が実現出来ました。

今回、フローレイアウトパネル(以下FLP)上にユーザーコントロールを垂直方向に並べて自作リストボックスの様な感じにしております。
ユーザーコントロールを並べて行くと下方向が画面外に行くため当然スクロールバーが出現します。

FLPに上記の処理をしてやるとユーザーコントロール外のFLPの余白みたいな所ではホイールがちゃんと反応してスクロールしました。

ですがユーザーコントロール上でホイールすると(考えれば当然なんですが)スクロールしない訳です。

ユーザーコントロール自体ではホイール操作までは関知できるとは思うのですが、そのあとそれをどうFLP側に伝えたら良いでしょうか?

それとも何か根本的に考え方が間違ってますでしょうか?

よろしくお願い致します。
引用返信 編集キー/
■76306 / inTopicNo.2)  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);
        }
    }
}

引用返信 編集キー/
■76332 / inTopicNo.3)  Re[2]: C#で子要素でのホイールイベントを親要素に渡したい
□投稿者/ ランディ (2回)-(2015/06/27(Sat) 18:11:50)
No76306 (魔界の仮面弁士 さん) に返信

ありがとうございます!

ちょっと急な案件が入って試せてないので、試し終わったら書き込みしたいと思います。


> ■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);
> }
> }
> }
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -