Object aus ButtonArray lokalisieren (für ScrollControlIntoView)

sTEk

Erfahrenes Mitglied
Hallo!

Ich habe ein Problem, wenn ich mittels ScrollControlIntoView() auf einen Button in meinem Button-Array (welche durch Bilder realisiert sind) zugreifen möchte.

Das Array wird in einer eigenen Klasse behandelt, die ich treffend ButtonArray genannt habe. Hier mal der Code:

Code:
    public class ButtonArray : System.Collections.CollectionBase
    {
        private readonly System.Windows.Forms.Form HostForm;

        public System.Windows.Forms.PictureBox AddNewButton()
        {
            Bitmap bmp = wirelessDruckschalter.Properties.Resources.Geraet;

            System.Windows.Forms.PictureBox PicBox = new
               System.Windows.Forms.PictureBox();

            this.List.Add(PicBox);

            HostForm.Controls.Add(PicBox);

            PicBox.Image = bmp;
            PicBox.SizeMode = PictureBoxSizeMode.AutoSize;
            PicBox.Location = new Point(50, 40 + (Count * PicBox.Height) + Count * 50);

            PicBox.Tag = this.Count;
            PicBox.Click += new System.EventHandler(ClickHandler);

            return PicBox;
        }
        public ButtonArray(System.Windows.Forms.Form host)
        {
            HostForm = host;
        }

        public System.Windows.Forms.PictureBox this[int Index]
        {
            get
            {
                return (System.Windows.Forms.PictureBox)this.List[Index];
            }
        }
        public void Remove()
        {
            // Check to be sure there is a button to remove.
            if (this.Count > 0)
            {
                HostForm.Controls.Remove(this[this.Count - 1]);
                this.List.RemoveAt(this.Count - 1);
            }
        }
        public void ClickHandler(Object sender, System.EventArgs e)
        {
            System.Windows.Forms.MessageBox.Show("You have clicked button " +
               ((System.Windows.Forms.PictureBox)sender).Tag.ToString());


//            ScrollControlIntoView((System.Windows.Forms.PictureBox)sender);
        }
    }

Ich rufe einfach die Funktion AddNewButton() in meinem Form sooft ich sie benötige auf.
Code:
            ButtonArray Array = new ButtonArray(this);
            for (int i = 0; i < 6; i++)
                Array.AddNewButton();

Nun möchte ich nach einem Click-Event auf den Button im aufrufenden Form scrollen, da ansonsten nach der MessageBox automatisch an den Anfang des Forms (also nach oben) gescrollt wird.
Wenn ich die gesammten Funktionen innerhalb des Forms einfüge klappt es, also muss ich dem Programm anscheinend irgendwie begreiflich machen, dass es auf dem aktiven Form scrollen soll.
Wie kann ich das bewerkstelligen?
 
D.h. du willst eigentlich, dass das Scrollen die Form übernimmt? Wenn ich das so richtig verstanden habe, dann sollte dein Array ein Event anbieten, welches von der Form abonniert werden kann. Bei einem Click dann einfach dieses Event auslösen.
 
Eigentlich nicht. Ich möchte, dass die Klasse, die mir die Mitglieder des Arrays erstellt, automatisch auf das Click-Ereignis-auslösende Picture scrollt.

Nach langem Hin und Her habe ich es gerade hinbekommen. Eigentlich ganz einfach, da ich im Prinzip schon alles implementiert habe. *AnDenKopfKlatsch*

Hier die Lösung:


...durch folgende Vereinbarung...
Code:
    public class ButtonArray : System.Collections.CollectionBase
    {
        private readonly Form HostForm;
        
        public ButtonArray(Form host)
        {
            HostForm = host;
        }
...
...wird das Handle (heißt das in C# noch so?) auf den aufrufenden Form (siehe letzters Snippet im ersten Post) übergeben - und somit kann im ClickHandler das hier aufgerufen werden...
Code:
        public void ClickHandler(Object sender, EventArgs e)
        {
...
            HostForm.ScrollControlIntoView(((PictureBox)sender)); //dadurch weiß er, wo sich das Object befindet
...            
        }

Danke trotzdem der Hilfe!
 
Zuletzt bearbeitet:
Zurück