C#, możliwość zmiany położenia i rozmiaru np textBox'a

0

Witam, jestem początkującym w C# i mam kłopot, bo nie wiem jak zrobić coś takiego:
Z menu po kliknięciu na ikonę dodaje odpowiednie pole np. textBox (to już mam gotowe), ale owe pole powinno pojawiać się w miejscu gdzie kliknę myszą oraz móc zmieniać jego wielkość. Jak to osiągnąć??

0

To może tak:

Jak klikniesz w menu, to ustaw sobie jakąs flage. Potem dodaj delegacje do zdarzenia na klikniecie mysza na formie. W kodzie tej funkcji sprawdz czy ustawiona jest flaga, jesli tak to tworz nowego texBoxa, właściwosc Location bedzie okreslona przez MousEvenArgs X i Y.

private void Form1_MouseClick(object sender, MouseEventArgs e)
{
     if (flag)
     {
           TextBox tb = new TextBox();
           tb.Location = new Point(e.X, e.Y);
           this.Controls.Add(tb);
     }
}

Co do zmiany rozmiaru tego TexBox'a, to moze lepszym spospobem byłoby zakotwiczenie go. Wtedy wraz z zamiana rozmiaru formy zmianialby sie rozmiar TexBox'a?

0

Dzięki, z pozycją TextBoxa działa, lecz jak chodzi o wielkość to zakotwiczenie nie da mi tego co potrzebuje, a mianowicie potrzebuje pole którego wielkość mógłbym sobie ustawić ręcznie za pomocą myszki.

0

Pomyslałem i napisałem na biegu. Trzy funkcje które trzeba dopisac odpowiednim delegacja obojetnie jakiej kontrolki. Łapiac za prawy rog mozna zmieniac jej rozmiar :)

        private void Control_MouseDown(object sender, MouseEventArgs e)
        {
            Control con = (Control)sender;

            int conWidth = con.ClientSize.Width;
            int conHeight = con.ClientSize.Height;

            // Sprawdzam czy myszka jest przy prawym dolnym rogu kontrolki.
            if (((conWidth - 10 < e.X) && (e.X < conWidth))
                && ((conHeight - 10 < e.Y) && (e.Y < conHeight)))
            {
                // jesli tak to na czas rozszerzania zmianiam kolor tła oraz kursor.
                con.BackColor = Color.Gray;
                con.Cursor = System.Windows.Forms.Cursors.SizeNWSE;
            }
        }

        private void Control_MouseUp(object sender, MouseEventArgs e)
        {
            Control con = (Control)sender;
            // a tutaj przywracam pierwotne dane.
            // "IBeam" jest kurosrem domyslnym kontrolki TextBox.
            con.Cursor = System.Windows.Forms.Cursors.IBeam;
            // "White" byl domysnym kolorem kontrolki.
            con.BackColor = Color.White;
        }

        private void Control_MouseMove(object sender, MouseEventArgs e)
        {
            Control con = (Control)sender;

            if (con.BackColor == Color.Gray)
            {
                con.Size = new Size(e.X, e.Y);
            }
        }

Mozna sie pokusic dodatkowo aby zapamietac poprzedni kursor i tło, wtedy nie bedzie trzeba modyfikowac kodu dla kolejnej kontrolki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1