کار با label و تغییر اندازه
سلام. خسته نباشید
یک مشکلی که لیبل داره اینه که اگه AutoSize رو برابر با True قرار بدی هر اندازه متن که وارد می کنیم فقط در راستای یک خط بزرگتر میشه حتی اگه از فرم بزنه بیرون و به خط بعدی نمی ره(البته شاید هم من بلد نیستم) و وقتی هم AutoSize رو False می کنم نمی تونم بفهمم که متن تو خط چندم قرار داره که خودم اندازه لیبل رو افزایش بدم.
من می خوام یک لیبل داشته باشم که عرضش به اندازه عرض فرمم باشه و متن از عرض لیبل تجاوز نکنه و به خط بعدی بشکنه و نسبت به اندازه متنی که دارم و اینکه چند خطه ارتفاع لیبلم تغییر کنه.
لطفا راهنمایی بکنید.
قبلا از لطفتون بسیار ممنونم
نقل قول: کار با label و تغییر اندازه
چیدمان فرم رو نمیدونم ولی میتونید با مشخصه های Dock و یا Anchor حداکثر فضای موجود رو به Label بدین. یا اینکه برای مثال میتونید با استفاده از متد GetPreferredSize اندازه ای که کنترل نیاز داره رو بدست بیارین:
private void Form1_SizeChanged(object sender, EventArgs e) {
label1.Size = label1.GetPreferredSize(new Size(this.ClientSize.Width, 0));
}
و یا اینکه autosize رو برابر true کنید و MaximumSize رو برابر اندازه مورد نظرتون قرار بدین:
private void Form1_SizeChanged(object sender, EventArgs e) {
label1.MaximumSize = label1.GetPreferredSize(new Size(this.ClientSize.Width, 0));
}
اگه یک شمای تصویری از فرمتون و کاری که میخواین بکنید بگذارین بهتر میشه کمک کرد.
1 ضمیمه
نقل قول: کار با label و تغییر اندازه
حیلی ممنون دوست عزیز بابت راهنمایی
ضمیمه 135383
من تقریبا یه فرمی مثل این می خوام. اطلاعات رو که هر کدوم متنی با اندازه نامشخص هست می خونه و هر رکورد رو تو یه لیبل قرار می ده و لیبل ها رو به صورت رانتایم زیر هم ایجاد می کنه و اندازه هر لیبل هم به اندازه متن بستگی داره.
میشه همچین چیزی ساخت؟
ممنون
نقل قول: کار با label و تغییر اندازه
1) یک FlowLayoutPanel در فرم ایجاد کنید و مشخصه Dock برو برابر Fill قرار بدین. مشخصه FlowDirection رو برابر TopDown قرار بدین.
2) به ازای هر آیتم یک Label با AutoSize=True ایجاد کنید و به FlowLayoutPanel.Controls اضافه کنید.
3) برای ایجاد فاصله افقی بین Label ها، مشخصه Margin هر Label رو با Topو Bottom دلخواه تغییر بدین.
2 ضمیمه
نقل قول: کار با label و تغییر اندازه
خیلی ممنون دوست عزیز همونی که می خواستم بود.
ولی یه مشکلی هست. تا زمانی که مطلب کمه و Flowlayoutpanel پر نشده همونجوریه که من می خوام ولی وقتی مطلب یکم زیاده و باید از flowlayoutpanel بزنه بیرون و دیگه از حالت چند خطی خارج میشه و میره رو یه خطی.
اینطوری:
این زمانیه که مطلب زیاده:
ضمیمه 135402
و این زمانیه که مطلب در حد اندازه خود flowlayoutcontrol هست:
ضمیمه 135403
نقل قول: کار با label و تغییر اندازه
من حالت دوم رو میخوام به شرطه اینکه بعد از پر شدن flowlayout اسکرول بشه
نقل قول: کار با label و تغییر اندازه
برای من اینطوری نیمشه و وقتی AutoScroll رو True میگذارم و WrapContent رو False به نظر درست نمایش میده ولی خوب، شما اگه نخوای از FlowLayoutPanel هم استفاده کنی میتونی اندازه مورد نیاز برای ارتفاع Label رو با متد GetPreferredSize بدست بیاری:
Size size = label1.GetPreferredSize(Form1.ClientSize.Width, int.MaxValue);
int desiredHeight = size.Height
اینطوری با دادن اندازه عرض فرم به عنوان عرض مورد نظر، ارتفاع مورد نیاز Label بدست میاد و میتونی Label ها رو یکی یکی در مکان مناسب ایجاد کنی و قرار بدی.
نقل قول: کار با label و تغییر اندازه
خیلی ممنون دوست عزیز
وقتی WrapContent رو برابر با false کردم مشکل حل شد.