PDA

View Full Version : فرم آهنربایی



vb-sosol
سه شنبه 19 اسفند 1393, 17:00 عصر
سلام دوستان
چطوری میتونم فرم اول رو که جابه جا میکنم فرم دوم هم جابه جا بشه
دقیقا مثل آهنربا بچسبه به فرم 1
مثل برنامه teamviewer
ولی نه با استفاده از تایمر!

Mahmoud Zaad
سه شنبه 19 اسفند 1393, 19:57 عصر
سلام
شما اندازه فرم اول رو که دارید، لوکیشن فرم اول رو هم که دارید خب انتهای فرم اول همیشه برابر هست با ابتدای فرم دوم. یعنی y فرم اول همون y فرم دوم هست. برای به دست آوردن x فرم دوم باید x فرم اول رو بعلاوه width فرم اول کنید. اینجوری x , y فرم دوم که همون گوشه بالای سمت چپ فرم هست به دست میاد. حالا هر بار که فرم اول حرکت داده میشه (یعنی در رویداد locationChanged فرم اول) لوکیشن جدید رو برای فرم دوم تنظیم کنید. همین داستان رو برای سایز هم میتونید انجام بدید یعنی اگه width فرم اول تغییر کرد، لوکیشن جدید رو ست کنید و اگه Heigth فرم اول تغییر کرد Height فرم دوم رو هم تغییر بدید

vb-sosol
چهارشنبه 20 اسفند 1393, 19:46 عصر
سلام
شما اندازه فرم اول رو که دارید، لوکیشن فرم اول رو هم که دارید خب انتهای فرم اول همیشه برابر هست با ابتدای فرم دوم. یعنی y فرم اول همون y فرم دوم هست. برای به دست آوردن x فرم دوم باید x فرم اول رو بعلاوه width فرم اول کنید. اینجوری x , y فرم دوم که همون گوشه بالای سمت چپ فرم هست به دست میاد. حالا هر بار که فرم اول حرکت داده میشه (یعنی در رویداد locationChanged فرم اول) لوکیشن جدید رو برای فرم دوم تنظیم کنید. همین داستان رو برای سایز هم میتونید انجام بدید یعنی اگه width فرم اول تغییر کرد، لوکیشن جدید رو ست کنید و اگه Heigth فرم اول تغییر کرد Height فرم دوم رو هم تغییر بدید
مرسی
این کار رو قبلا انجام دادم
ولی هنگام اجرا هیچ تغییری رخ نمیده و باید از تایمر استفاده بشه
ولی من نمیخوام از تایمر استفاده کنم

Mahmoud Zaad
چهارشنبه 20 اسفند 1393, 20:03 عصر
میشه، من یه بخشیش رو میگم بقیه اش رو خودتون انجام بدید:
یه دکمه توی فرم اول بذارید که فرم دوم رو باز میکنه:
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
f2.Location = new Point(this.Location.X + this.Width, this.Location.Y);
}

حالا برای رویداد locationChanged فرم اول هم کد زیر رو بنویسید:
private void Form1_LocationChanged(object sender, EventArgs e)
{
if (Application.OpenForms["Form2"] != null)
(Application.OpenForms["Form2"] as Form2).Location = new Point(this.Location.X + this.Width, this.Location.Y);
}

Death Ghost
پنج شنبه 21 اسفند 1393, 09:39 صبح
سلام تو فرم اولیت اونجا که می خوای فرم دوم رو نشون بدی می تونی از این استفاده کنی



secondForm select = new secondForm();
select.WindowStartupLocation = WindowStartupLocation.Manual;
select.Left = this.Left;
select.Top = this.Top;
// show Select form
select.ShowDialog();

vb-sosol
جمعه 22 اسفند 1393, 12:35 عصر
مشکل من اینه که موقع اجرا ممکنه محل فرم اول تغییر کنه!

Mahmoud Zaad
جمعه 22 اسفند 1393, 12:47 عصر
شما مگه نمیگید دو تا فرم دارید که فرم دوم همیشه به فرم اول چسبیده؟ خب کدی که نوشتم دقیقاً همین کار رو انجام میده، ابتدا فرم اول باز میشه، شما روی یک دکمه کلیک می کنید تا فرم دوم باز بشه، فرم دوم سمت راست فرم اول باز میشه، با توجه به کدی که برای رویداد LocationChanged نوشتم شما هر وقت فرم اول رو تغییر بدید فرم دوم هم جاش تغییر میکنه و همچنان اینها به هم چسبیده هستند. حالا یا من متوجه سوال شما نشدم یا شما کدها رو امتحان نکردید.

vb-sosol
جمعه 22 اسفند 1393, 13:03 عصر
اگر موقع اجرا فرم اول جابه جا بشه فرم دوم دیگه کنارش نیست!

Mahmoud Zaad
جمعه 22 اسفند 1393, 13:11 عصر
آقا یه شخص بی طرف این 4 خط کد رو تست کنه ببینیم داستان چیه!!!

vb-sosol
جمعه 22 اسفند 1393, 13:24 عصر
آقا یه شخص بی طرف این 4 خط کد رو تست کنه ببینیم داستان چیه!!!

من میخوام فرم اول که جابه جا بشه فرم دوم رو همراه خودش بکشه ببره
کدها رو نوشتم تو پروژه هروقت برنامه اجرا میشه میاد کنارش و این خوبه
ولی اگه در هنگام اجرا کاربر فرم اول رو بکشه فرم دوم تکون نمیخوره!!!
مرسی

محمد رضا فاتحی
جمعه 22 اسفند 1393, 13:42 عصر
ولی اگه در هنگام اجرا کاربر فرم اول رو بکشه فرم دوم تکون نمیخوره!!
ان شا الله که تو رویداد LocationChanged کدی نوشتید؟

vb-sosol
جمعه 22 اسفند 1393, 18:20 عصر
ان شا الله که تو رویداد LocationChanged کدی نوشتید؟


بله ولی اتفاقی نمیوفته:ناراحت:

محمد رضا فاتحی
شنبه 23 اسفند 1393, 09:05 صبح
بفرما اینم یه نمونه ساده
دوستمون کدشون درسته ولی به جای ShowDialogeباید فرم Show بشه

Mahmoud Zaad
شنبه 23 اسفند 1393, 09:13 صبح
البته من جایی showDialog ننوشته بودم، با همون کدهای بالا هم جواب میداد نیازی به تعریف فرم به صورت سراسری نبود، البته چون border فرم تغییر کرده، نیاز بوده که اون +10 انجام بشه.

محمد رضا فاتحی
شنبه 23 اسفند 1393, 09:18 صبح
به جان خودم من منظورم شما نبودید!!!:گریه: و راستش من دیشب نوشتم و دسترسی به اینترنت نبود برای همین کد شما رو نتونستم استفاده کنم شرمنده!

secondForm select = newsecondForm(); select.WindowStartupLocation = WindowStartupLocation.Manual;
select.Left = this.Left;
select.Top = this.Top;
// show Select form
select.ShowDialog();