PDA

View Full Version : سوال: بهم خوردن مختصات هنگام اسکرول کنترل پنل یا فرم



رامین مرادی
دوشنبه 30 بهمن 1396, 12:41 عصر
سلام وقت بخیر دوستان. برای یه کاری در زمان اجرا کنترل هایی ادد میکنم رو فرم . وقتی کنترل هام تعدادشون زیاد میشه فرم یا پنل اسکرول دار میشه. اینجاشم صحیحه. وقتی اسکرول میکنم پایین و رو دکمه ایجاد کنترل جدید کلیک میکنم مبنای محاسبه کلا بهم میخوره. یعنی بجای اونکه اون مقداری که اسکرول شده هم اضافه بشه به top ، اضافه نمیشه. مبنا رو میاد از اول فرم حساب میکنه که باعث بهم خوردگی میشه.
نمونه کد و تصویر رو میزارم.



private void radButton1_Click(object sender, EventArgs e)
{
Panel g = new Panel();
g.Location = new Point(10, Top+10);
g.AutoSize = false;
Label l = new Label();
l.Text = "متن تست دوم لیبل متن تست دوم لیبل متن تست دوم لیبل متن تست دوم لیبل";
l.Location = new Point(20,20);
l.MaximumSize = new Size(180, 0);
l.AutoSize = true;
g.Controls.Add(l);
this.Controls.Add(g);
Top += 100;
}



147687

danialafshari
دوشنبه 30 بهمن 1396, 13:03 عصر
با سلام
چرا از FlowLayoutPanel استفاده نمیکنید؟؟؟
بهتره balloon Message رو هم از جنس UserControl با Proprty بسازی
هم حجم کد نویسیت میاد پایین هم performance میره بالا در ضمن اصولی تره
موفق باشی

رامین مرادی
دوشنبه 30 بهمن 1396, 13:38 عصر
ممنون مشکل اسکرول هم حل شد.فقط یه لینک خوب برا طراحی یوزر کنترل بهم معرفی کنید.

danialafshari
دوشنبه 30 بهمن 1396, 14:30 عصر
ممنون مشکل اسکرول هم حل شد.فقط یه لینک خوب برا طراحی یوزر کنترل بهم معرفی کنید.

آموزش یوزرکنترل به صورت فراوان در اینترنت وجود داره میتونید توی گوگل سرچ کنید
یک user control ساده در ضمیمه:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
chatStyle1.SetMessage(textBox1.Text.Trim());
textBox1.ResetText();
}
}

موفق باشید

رامین مرادی
دوشنبه 30 بهمن 1396, 15:17 عصر
آموزش یوزرکنترل به صورت فراوان در اینترنت وجود داره میتونید توی گوگل سرچ کنید
یک user control ساده در ضمیمه:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
chatStyle1.SetMessage(textBox1.Text.Trim());
textBox1.ResetText();
}
}

موفق باشید
ممنون از مثال خوبتون.
حالا یه مشکل کوچیک هست. وقتی فرم راست به چپ باشه لیبل هم سایزش اتو باشه. وقتی متن بزرگ میشه از سمت راست طولش زیاد میشه مجبورم بزارم سمت چپ که اصلا خوشایند نیست. برا اینکه عرض لیبل در متنهای طولانی از سمت راست زیاد بشه چیکار کنم؟

danialafshari
دوشنبه 30 بهمن 1396, 16:58 عصر
ممنون از مثال خوبتون.
حالا یه مشکل کوچیک هست. وقتی فرم راست به چپ باشه لیبل هم سایزش اتو باشه. وقتی متن بزرگ میشه از سمت راست طولش زیاد میشه مجبورم بزارم سمت چپ که اصلا خوشایند نیست. برا اینکه عرض لیبل در متنهای طولانی از سمت راست زیاد بشه چیکار کنم؟
یک راهش اینه هست که مانند نمونه Sample که گذاشتم فرم رو چپ به راست قرار بدید و آبجکتهایی که نیاز به rtl دارن رو مرتب کنید (فعلاً این به ذهنم میرسه)
در ضمن در نظر داشته باشید که برنامه های پیام رسان در رشد طولی (X) محدودیت دارن و بیشتر رشد متن، عرضی (Y) هست که باید برای کامپوننت در نظر بگیرید همونطور که گفتم یک نمونه خیلی سادس که اگه نیاز دارید باید کاملش کنید و تقریباً برنامه نویسی کامپوننت همانند ویندوز فرم هست که اصول شی گرایی در ساخت یوزر کنترل خیلی بدردبخوره

رامین مرادی
چهارشنبه 02 اسفند 1396, 09:26 صبح
یک راهش اینه هست که مانند نمونه Sample که گذاشتم فرم رو چپ به راست قرار بدید و آبجکتهایی که نیاز به rtl دارن رو مرتب کنید (فعلاً این به ذهنم میرسه)
در ضمن در نظر داشته باشید که برنامه های پیام رسان در رشد طولی (X) محدودیت دارن و بیشتر رشد متن، عرضی (Y) هست که باید برای کامپوننت در نظر بگیرید همونطور که گفتم یک نمونه خیلی سادس که اگه نیاز دارید باید کاملش کنید و تقریباً برنامه نویسی کامپوننت همانند ویندوز فرم هست که اصول شی گرایی در ساخت یوزر کنترل خیلی بدردبخوره
ممنون دوست عزیز با ین کد کارم را افتاد
txtMsg.Left = panel2.Width-txtMsg.Width;