PDA

View Full Version : مبتدی: کار با label و تغییر اندازه



mehran788
یک شنبه 29 شهریور 1394, 00:58 صبح
سلام. خسته نباشید
یک مشکلی که لیبل داره اینه که اگه AutoSize رو برابر با True قرار بدی هر اندازه متن که وارد می کنیم فقط در راستای یک خط بزرگتر میشه حتی اگه از فرم بزنه بیرون و به خط بعدی نمی ره(البته شاید هم من بلد نیستم) و وقتی هم AutoSize رو False می کنم نمی تونم بفهمم که متن تو خط چندم قرار داره که خودم اندازه لیبل رو افزایش بدم.
من می خوام یک لیبل داشته باشم که عرضش به اندازه عرض فرمم باشه و متن از عرض لیبل تجاوز نکنه و به خط بعدی بشکنه و نسبت به اندازه متنی که دارم و اینکه چند خطه ارتفاع لیبلم تغییر کنه.
لطفا راهنمایی بکنید.
قبلا از لطفتون بسیار ممنونم

plus
یک شنبه 29 شهریور 1394, 10:09 صبح
چیدمان فرم رو نمیدونم ولی میتونید با مشخصه های 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));
}


اگه یک شمای تصویری از فرمتون و کاری که میخواین بکنید بگذارین بهتر میشه کمک کرد.

mehran788
دوشنبه 30 شهریور 1394, 14:55 عصر
حیلی ممنون دوست عزیز بابت راهنمایی
135383
من تقریبا یه فرمی مثل این می خوام. اطلاعات رو که هر کدوم متنی با اندازه نامشخص هست می خونه و هر رکورد رو تو یه لیبل قرار می ده و لیبل ها رو به صورت رانتایم زیر هم ایجاد می کنه و اندازه هر لیبل هم به اندازه متن بستگی داره.
میشه همچین چیزی ساخت؟
ممنون

plus
دوشنبه 30 شهریور 1394, 15:22 عصر
1) یک FlowLayoutPanel در فرم ایجاد کنید و مشخصه Dock برو برابر Fill قرار بدین. مشخصه FlowDirection رو برابر TopDown قرار بدین.
2) به ازای هر آیتم یک Label با AutoSize=True ایجاد کنید و به FlowLayoutPanel.Controls اضافه کنید.
3) برای ایجاد فاصله افقی بین Label ها، مشخصه Margin هر Label رو با Topو Bottom دلخواه تغییر بدین.

mehran788
دوشنبه 30 شهریور 1394, 23:46 عصر
خیلی ممنون دوست عزیز همونی که می خواستم بود.
ولی یه مشکلی هست. تا زمانی که مطلب کمه و Flowlayoutpanel پر نشده همونجوریه که من می خوام ولی وقتی مطلب یکم زیاده و باید از flowlayoutpanel بزنه بیرون و دیگه از حالت چند خطی خارج میشه و میره رو یه خطی.
اینطوری:
این زمانیه که مطلب زیاده:
135402
و این زمانیه که مطلب در حد اندازه خود flowlayoutcontrol هست:
135403

mehran788
دوشنبه 30 شهریور 1394, 23:47 عصر
من حالت دوم رو میخوام به شرطه اینکه بعد از پر شدن flowlayout اسکرول بشه

plus
سه شنبه 31 شهریور 1394, 01:45 صبح
برای من اینطوری نیمشه و وقتی AutoScroll رو True میگذارم و WrapContent رو False به نظر درست نمایش میده ولی خوب، شما اگه نخوای از FlowLayoutPanel هم استفاده کنی میتونی اندازه مورد نیاز برای ارتفاع Label رو با متد GetPreferredSize بدست بیاری:

Size size = label1.GetPreferredSize(Form1.ClientSize.Width, int.MaxValue);
int desiredHeight = size.Height

اینطوری با دادن اندازه عرض فرم به عنوان عرض مورد نظر، ارتفاع مورد نیاز Label بدست میاد و میتونی Label ها رو یکی یکی در مکان مناسب ایجاد کنی و قرار بدی.

mehran788
سه شنبه 31 شهریور 1394, 05:30 صبح
خیلی ممنون دوست عزیز
وقتی WrapContent رو برابر با false کردم مشکل حل شد.