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ąć??
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?
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.
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 :)