چسباندن یک فرم به لبه فرم دیگر
سلام توی برنامه ای مثل Team viewerیک پنجره کوچیک به پنجره اصلی برنامه چسبیده شده و با حرکت پنجره اصلی اون هم باهاش حرکت میکنه، حالا توی سی شارپ چطوری همچین فرمی رو باید ساخت، و مهمتر اینکه با یک دکمه بشه مخفیش کرد و با یک دکمه نمایش داد و هر دفه که نمایش داده میشه به قسمت راست پنجره اصلی بچسبه؟!
نقل قول: چسباندن یک فرم به لبه فرم دیگر
public partial class Form1 : Form
{
Timer timer;
bool resetting = false;
Form2 frm2;
public Form1()
{
InitializeComponent();
frm2 = new Form2();
frm2.Show();
timer = new Timer();
timer.Interval = 50;
timer.Tick += new EventHandler(timer1_Tick);
}
private Form mMainForm;
private List<Form> mConnectedForms = new List<Form>();
private Point mMainLocation;
public Form1(Form mainForm)
{
this.mMainForm = mainForm;
this.mMainLocation = new Point(this.mMainForm.Location.X, this.mMainForm.Location.Y);
this.mMainForm.LocationChanged += new EventHandler(Form1_LocationChanged);
}
public void ConnectForm(Form form)
{
if (!this.mConnectedForms.Contains(form))
{
this.mConnectedForms.Add(form);
}
}
private void button1_Click(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void Form1_Activated(object sender, EventArgs e)
{
if (!resetting)
{
timer.Start();
frm2.Focus();
this.Focus();
resetting = true;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
timer.Stop();
resetting = false;
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
}
private void Form1_LocationChanged(object sender, EventArgs e)
{
Point relativeChange = new Point(this.mMainForm.Location.X - this.mMainLocation.X, this.mMainForm.Location.Y - this.mMainLocation.Y);
foreach (Form form in this.mConnectedForms)
{
form.Location = new Point(form.Location.X + relativeChange.X, form.Location.Y + relativeChange.Y);
}
this.mMainLocation = new Point(this.mMainForm.Location.X, this.mMainForm.Location.Y);
}
}
اینم فرم 2
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
}
}
}
نقل قول: چسباندن یک فرم به لبه فرم دیگر
برا جلوگیری از شلوغ کاری اینو تویه کلاس بنویس
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
class Class1
{
private Form mMainForm;
private List<Form> mConnectedForms = new List<Form>();
private Point mMainLocation;
public Class1(Form mainForm)
{
this.mMainForm = mainForm;
this.mMainLocation = new Point(this.mMainForm.Location.X, this.mMainForm.Location.Y);
this.mMainForm.LocationChanged += new EventHandler(MainForm_LocationChanged);
}
public void ConnectForm(Form form)
{
if (!this.mConnectedForms.Contains(form))
{
this.mConnectedForms.Add(form);
}
}
void MainForm_LocationChanged(object sender, EventArgs e)
{
Point relativeChange = new Point(this.mMainForm.Location.X - this.mMainLocation.X, this.mMainForm.Location.Y - this.mMainLocation.Y);
foreach (Form form in this.mConnectedForms)
{
form.Location = new Point(form.Location.X + relativeChange.X, form.Location.Y + relativeChange.Y);
}
this.mMainLocation = new Point(this.mMainForm.Location.X, this.mMainForm.Location.Y);
}
}
}
نقل قول: چسباندن یک فرم به لبه فرم دیگر
نقل قول:
نوشته شده توسط
kamiloted
public partial class Form1 : Form
{
Timer timer;
bool resetting = false;
Form2 frm2;
public Form1()
{
InitializeComponent();
frm2 = new Form2();
frm2.Show();
timer = new Timer();
timer.Interval = 50;
timer.Tick += new EventHandler(timer1_Tick);
}
private Form mMainForm;
private List<Form> mConnectedForms = new List<Form>();
private Point mMainLocation;
public Form1(Form mainForm)
{
this.mMainForm = mainForm;
this.mMainLocation = new Point(this.mMainForm.Location.X, this.mMainForm.Location.Y);
this.mMainForm.LocationChanged += new EventHandler(Form1_LocationChanged);
}
public void ConnectForm(Form form)
{
if (!this.mConnectedForms.Contains(form))
{
this.mConnectedForms.Add(form);
}
}
private void button1_Click(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void Form1_Activated(object sender, EventArgs e)
{
if (!resetting)
{
timer.Start();
frm2.Focus();
this.Focus();
resetting = true;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
timer.Stop();
resetting = false;
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
}
private void Form1_LocationChanged(object sender, EventArgs e)
{
Point relativeChange = new Point(this.mMainForm.Location.X - this.mMainLocation.X, this.mMainForm.Location.Y - this.mMainLocation.Y);
foreach (Form form in this.mConnectedForms)
{
form.Location = new Point(form.Location.X + relativeChange.X, form.Location.Y + relativeChange.Y);
}
this.mMainLocation = new Point(this.mMainForm.Location.X, this.mMainForm.Location.Y);
}
}
اینم فرم 2
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
}
}
}
کار نکرد لطفا برنامشو پیوست کنید و کداشو هم یه توضیح بدین.
نقل قول: چسباندن یک فرم به لبه فرم دیگر
نقل قول:
نوشته شده توسط
daniyaltjm
کار نکرد لطفا برنامشو پیوست کنید و کداشو هم یه توضیح بدین.
چون عکس پرو فایلتو عوض کردی تا 10 دیقه دیگه با 2 خط کارتو راه می ندازم.
نقل قول: چسباندن یک فرم به لبه فرم دیگر
اینم نمونه.لذت ببر.دکمه تشکر فراموش نشه
فرم
نقل قول: چسباندن یک فرم به لبه فرم دیگر
سلام
Form2 frm2;
public Form1()
{
InitializeComponent();
frm2 = new Form2();
frm2.Show();
this.LocationChanged += new EventHandler(Form1_LocationChanged);
}
private void Form1_LocationChanged(object sender, EventArgs e)
{
int x = this.Width + this.Location.X;
int y = this.Location.Y;
frm2.Location = new Point(x, y);
}
نقل قول: چسباندن یک فرم به لبه فرم دیگر
نقل قول:
اینم نمونه.لذت ببر.دکمه تشکر فراموش نشه
ممنون ولی کامل لذت نبردم! چون توی تیم ویوور وقتی پنچره دوم رو ازش جدا میکردی و بعد پنجره اول رو جابجا میکردی پنجره دوم سرجای خودش می موند ولی برنامه شما وقتی که جداش میکنم و بعد پنجره اول رو جابجا میکنم پنجره دوم خودبخود میاد میچسبه!!
و یک مورد فاحش دیگه اینکه وقتی پنجره ها Resize میشوند باید هر دو با هم Resize بشوند نه اینکه اون یکی برود زیر اون یکی و به قول معروف شیر تو شیر بشود .:لبخندساده:
نقل قول: چسباندن یک فرم به لبه فرم دیگر
نقل قول:
نوشته شده توسط
moradian
سلام
Form2 frm2;
public Form1()
{
InitializeComponent();
frm2 = new Form2();
frm2.Show();
this.LocationChanged += new EventHandler(Form1_LocationChanged);
}
private void Form1_LocationChanged(object sender, EventArgs e)
{
int x = this.Width + this.Location.X;
int y = this.Location.Y;
frm2.Location = new Point(x, y);
}
کد خوبی نوشتید اگه قابلیت Dock شدن و تغییر سایز هر دو با هم رو هم بهش اضافه کنید کامل میشه.
1 ضمیمه
نقل قول: چسباندن یک فرم به لبه فرم دیگر
نقل قول:
نوشته شده توسط
daniyaltjm
ممنون ولی کامل لذت نبردم! چون توی تیم ویوور وقتی پنچره دوم رو ازش جدا میکردی و بعد پنجره اول رو جابجا میکردی پنجره دوم سرجای خودش می موند ولی برنامه شما وقتی که جداش میکنم و بعد پنجره اول رو جابجا میکنم پنجره دوم خودبخود میاد میچسبه!!
و یک مورد فاحش دیگه اینکه وقتی پنجره ها Resize میشوند باید هر دو با هم Resize بشوند نه اینکه اون یکی برود زیر اون یکی و به قول معروف شیر تو شیر بشود .:لبخندساده:
اگه توجه کنید توی تیم ویور فرم اصلی Resize نمیشه. فقط فرم کوچیک Resize میشه.بعد کد اول من بود.فرم، محیط اتچ داشت که از اون جدا میکردی دیگه جابه جا نمیشد.و به محض اینکه وارد محیط اتچ میشد همزمان جابه جا میشد.مثل تیم ویور.
من یه حرفه ای تر نوشتم نیازی به فرم نیست.تازه فرم برنامتون سنگین نمیشه.از 2 تا هم استفاده نمیکنید. دقیقا مثل
ضمیمه 141727
این خیلی بهتر عمل میکنه اگه روشن باشه فرم ریسایز بشه هردو ریسایز میشن.
هردو جمع میشن.
نقل قول: چسباندن یک فرم به لبه فرم دیگر
نقل قول:
گه توجه کنید توی تیم ویور فرم اصلی Resize نمیشه. فقط فرم کوچیک Resize میشه.بعد کد اول من بود.فرم، محیط اتچ داشت که از اون جدا میکردی دیگه جابه جا نمیشد.و به محض اینکه وارد محیط اتچ میشد همزمان جابه جا میشد.مثل تیم ویور.
خوب الان تیم ویور به کنار در کل نمیشه کاری کرد؟ بعدش هم توی برنامتون من وقتی فرم کوچیک رو جدا میکنم و بعد فرم یک رو تکون میدم خودکار میچسبند به هم!!! من می خوام حالت Dock داشته باشه که وقتی سمت چپ فرم کوچیک به سمت راست فرم بزرگ مثلا یک سانت نزدیک شد بچسبند به هم؟! مال شما اصلا اینطور نبود.
نقل قول:
من یه حرفه ای تر نوشتم نیازی به فرم نیست.تازه فرم برنامتون سنگین نمیشه.از 2 تا هم استفاده نمیکنید. دقیقا مثل
اونم بزارید ببینیم!
نقل قول: چسباندن یک فرم به لبه فرم دیگر
نقل قول:
نوشته شده توسط
daniyaltjm
خوب الان تیم ویور به کنار در کل نمیشه کاری کرد؟ بعدش هم توی برنامتون من وقتی فرم کوچیک رو جدا میکنم و بعد فرم یک رو تکون میدم خودکار میچسبند به هم!!! من می خوام حالت Dock داشته باشه که وقتی سمت چپ فرم کوچیک به سمت راست فرم بزرگ مثلا یک سانت نزدیک شد بچسبند به هم؟! مال شما اصلا اینطور نبود.
اونم بزارید ببینیم!
Point relativeChange = new Point(this.mMainForm.Location.X - this.mMainLocation.X, this.mMainForm.Location.Y - this.mMainLocation.Y); foreach (Form form in this.mConnectedForms)
{
form.Location = new Point(form.Location.X + relativeChange.X, form.Location.Y + relativeChange.Y);
}
this.mMainLocation = new Point(this.mMainForm.Location.X, this.mMainForm.Location.Y);
برای : وقتی سمت چپ فرم کوچیک به سمت راست فرم بزرگ مثلا یک سانت نزدیک شد بچسبند
شما تو لوکیشن کاستم رو اون مقدار که میخواید وارد کنید.البته بهتره با کد نسبت به یک دیگر نوشته بشه.
به محض اینکه تو اون پوزیشن قرار گرفت اتچ میشه
نقل قول: چسباندن یک فرم به لبه فرم دیگر
نقل قول:
نوشته شده توسط
kamiloted
Point relativeChange = new Point(this.mMainForm.Location.X - this.mMainLocation.X, this.mMainForm.Location.Y - this.mMainLocation.Y); foreach (Form form in this.mConnectedForms)
{
form.Location = new Point(form.Location.X + relativeChange.X, form.Location.Y + relativeChange.Y);
}
this.mMainLocation = new Point(this.mMainForm.Location.X, this.mMainForm.Location.Y);
برای : وقتی سمت چپ فرم کوچیک به سمت راست فرم بزرگ مثلا یک سانت نزدیک شد بچسبند
شما تو لوکیشن کاستم رو اون مقدار که میخواید وارد کنید.البته بهتره با کد نسبت به یک دیگر نوشته بشه.
به محض اینکه تو اون پوزیشن قرار گرفت اتچ میشه
بسیار خوب این کد رو توی رویداد Move فرم کوچیک بذارم؟
نقل قول: چسباندن یک فرم به لبه فرم دیگر
نقل قول:
نوشته شده توسط
daniyaltjm
کد خوبی نوشتید اگه قابلیت Dock شدن و تغییر سایز هر دو با هم رو هم بهش اضافه کنید کامل میشه.
Form2 frm2;
public Form1()
{
InitializeComponent();
frm2 = new Form2();
frm2.Show();
this.LocationChanged += new EventHandler(Form1_LocationChanged);
this.Resize += new EventHandler(Form1_Resize);
}
private void Form1_LocationChanged(object sender, EventArgs e)
{
int x = this.Width + this.Location.X;
int y = this.Location.Y;
frm2.Location = new Point(x, y);
frm2.Height = this.Height;
}
private void Form1_Resize(object sender, EventArgs e)
{
Form1_LocationChanged(sender, e);
}
یه کمی هم از خودت مایه بگذار، عزیز دل برادر :لبخندساده: