|
■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);
}
}
}
|