উইন্ডোজ ফর্মগুলিতে একটি লেবেলের জন্য আমরা কীভাবে শব্দ মোড়ানো কার্যকারিতা পেতে পারি ?
আমি একটি প্যানেলে একটি লেবেল রেখেছি এবং গতিশীলভাবে লেবেলে কিছু পাঠ্য যুক্ত করেছি। তবে এটি প্যানেলের দৈর্ঘ্য ছাড়িয়ে গেছে। আমি কীভাবে এটি সমাধান করতে পারি?
উইন্ডোজ ফর্মগুলিতে একটি লেবেলের জন্য আমরা কীভাবে শব্দ মোড়ানো কার্যকারিতা পেতে পারি ?
আমি একটি প্যানেলে একটি লেবেল রেখেছি এবং গতিশীলভাবে লেবেলে কিছু পাঠ্য যুক্ত করেছি। তবে এটি প্যানেলের দৈর্ঘ্য ছাড়িয়ে গেছে। আমি কীভাবে এটি সমাধান করতে পারি?
উত্তর:
দ্রুত উত্তর: সুইচ বন্ধ স্বয়ংক্রিয়-আকৃতি ।
এখানে বড় সমস্যা হ'ল লেবেলটি তার উচ্চতা স্বয়ংক্রিয়ভাবে পরিবর্তন করবে না (কেবলমাত্র প্রস্থ)। এই অধিকারটি পেতে আপনাকে লেবেলটি সাবক্লাস করতে হবে এবং উল্লম্ব আকারের যুক্তি যুক্ত করতে হবে।
মূলত অনপেন্টে আপনাকে যা করা দরকার তা হ'ল:
আপনাকে কনস্ট্রাক্টরে পুনরায় আকারের শৈলী পতাকাটি সেট করতে হবে ।
আসলে, গৃহীত উত্তর অহেতুক জটিল।
আপনি যদি লেবেলটিকে অটোসাইজে সেট করেন তবে এটি আপনি যে পাঠ্যে রেখেছেন তা স্বয়ংক্রিয়ভাবে বৃদ্ধি পাবে। (এটি উল্লম্ব বৃদ্ধি অন্তর্ভুক্ত।)
আপনি যদি কোনও নির্দিষ্ট প্রস্থে এটিকে শব্দ মোড়ানো করতে চান তবে আপনি ম্যাক্সিমামসাইজ সম্পত্তি সেট করতে পারেন।
myLabel.MaximumSize = new Size(100, 0);
myLabel.AutoSize = true;
পরীক্ষিত এবং কাজ করে।
Dock
আপনার লেবেল এবং প্যানেল উভয়ের সম্পত্তি সেট করতে সক্ষম হওয়া উচিত Top
।
OnResize
পিতামাতার সাথে সংযুক্ত হয়ে কল করেছিmyLabel.MaximumSize = new Size(Bounds.Width, 0);
আমার ক্ষেত্রে (একটি প্যানেলে লেবেল) আমি সেট করেছি label.AutoSize = false
এবং label.Dock = Fill
। এবং লেবেল পাঠ্য স্বয়ংক্রিয়ভাবে মোড়ানো হয়।
খারাপ সংবাদ: একটি অটোরেপ সম্পত্তি নেই।
সুসংবাদ: সুড়ঙ্গের শেষে একটি আলো আছে!
আপনি এটিকে গতিশীল আকারে আকার দেওয়ার জন্য এই প্রোগ্রামটিমেটিক্যালি সম্পাদন করতে পারেন তবে এখানে সবচেয়ে সহজ সমাধান:
সর্বোচ্চ আকার = ( প্রস্থ , উচ্চতা ) যেখানে প্রস্থ = সর্বোচ্চ আকার আপনি লেবেলটি চান এবং উচ্চতা = আপনি কত পিক্সেল এটি মোড়ানো করতে চান
এমএসডিএন থেকে , স্বয়ংক্রিয়ভাবে লেবেলে পাঠ্য মোড়ানো :
using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
public class GrowLabel : Label {
private bool mGrowing;
public GrowLabel() {
this.AutoSize = false;
}
private void resizeLabel() {
if (mGrowing)
return;
try {
mGrowing = true;
Size sz = new Size(this.Width, Int32.MaxValue);
sz = TextRenderer.MeasureText(this.Text, this.Font, sz, TextFormatFlags.WordBreak);
this.Height = sz.Height;
}
finally {
mGrowing = false;
}
}
protected override void OnTextChanged(EventArgs e) {
base.OnTextChanged(e);
resizeLabel();
}
protected override void OnFontChanged(EventArgs e) {
base.OnFontChanged(e);
resizeLabel();
}
protected override void OnSizeChanged(EventArgs e) {
base.OnSizeChanged(e);
resizeLabel();
}
}
Height = sz.Height + Padding.Vertical;
)
আমাকে একটি দ্রুত সমাধান বের করতে হয়েছিল, সুতরাং আমি কেবলমাত্র এই বৈশিষ্ট্যগুলির সাথে একটি পাঠ্যবক্স ব্যবহার করেছি:
var myLabel = new TextBox
{
Text = "xxx xxx xxx",
WordWrap = true,
AutoSize = false,
Enabled = false,
Size = new Size(60, 30),
BorderStyle = BorderStyle.None,
Multiline = true,
BackColor = container.BackColor
};
@ হাইপোর উত্তরের উপর ভিত্তি করে আরও ভাল একটি করুন
public class GrowLabel : Label {
private bool mGrowing;
public GrowLabel() {
this.AutoSize = false;
}
private void resizeLabel() {
if (mGrowing)
return;
try {
mGrowing = true;
int width = this.Parent == null ? this.Width : this.Parent.Width;
Size sz = new Size(this.Width, Int32.MaxValue);
sz = TextRenderer.MeasureText(this.Text, this.Font, sz, TextFormatFlags.WordBreak);
this.Height = sz.Height + Padding.Bottom + Padding.Top;
} finally {
mGrowing = false;
}
}
protected override void OnTextChanged(EventArgs e) {
base.OnTextChanged(e);
resizeLabel();
}
protected override void OnFontChanged(EventArgs e) {
base.OnFontChanged(e);
resizeLabel();
}
protected override void OnSizeChanged(EventArgs e) {
base.OnSizeChanged(e);
resizeLabel();
}
}
int width = this.Parent == null ? this.Width : this.Parent.Width;
এটি আপনাকে পিতামাতার সাথে ডক করার সময় অটো-গ্রোম লেবেল ব্যবহার করতে দেয়, যেমন একটি প্যানেল।
this.Height = sz.Height + Padding.Bottom + Padding.Top;
এখানে আমরা উপরে এবং নীচের জন্য প্যাডিং যত্ন নিতে।
ClientSizeChanged event
প্যানেলের জন্য হ্যান্ডেল করুন , লেবেলটি স্থান পূরণ করুন:
private void Panel2_ClientSizeChanged(object sender, EventArgs e)
{
label1.MaximumSize = new Size((sender as Control).ClientSize.Width - label1.Left, 10000);
}
Auto-Size
লেবেলের জন্য সেট করুনtrue
Dock
লেবেলের জন্য সেট করুনFill
নিশ্চিত নন এটা সব ব্যবহার-মামলা মাপসই করা হবে কিন্তু আমি প্রায়ই মোড়ানো আচরণ পেতে একটি সহজ কৌতুক ব্যবহার করুন: আপনার করা Label
সঙ্গে AutoSize=false
একটি 1x1 ভিতরে TableLayoutPanel
যা যত্ন নিতে হবে Label
'র আকার।
যদি আপনার প্যানেলটি আপনার লেবেলের প্রস্থাকে সীমাবদ্ধ করে রাখছে, আপনি আপনার লেবেলের অ্যাঙ্কর সম্পত্তিটি বাম, ডানদিকে সেট করতে পারেন এবং অটোসাইজকে সত্যতে সেট করতে পারেন। এটি প্যানেলের SizeChanged
ইভেন্টটি শোনার এবং পূর্ববর্তী উত্তরেরnew Size(((Control)sender).Size.Width, 0)
পরামর্শ অনুসারে লেবেলের ম্যাক্সিমামসাইজকে আপডেট করার মতো ধারণা । অ্যাঙ্কর সম্পত্তিতে তালিকাভুক্ত প্রতিটি পক্ষই কন্ট্রোলের স্বতন্ত্র অভ্যন্তরীণ দিকটি সহ ভালভাবে অ্যাঙ্করড। সুতরাং অ্যাঙ্কারে দুটি বিপরীত পক্ষের তালিকা কার্যকরভাবে নিয়ন্ত্রণের মাত্রা নির্ধারণ করে। অ্যাঙ্করিং টু বাম এবং রাইট কন্ট্রোলের প্রস্থের সম্পত্তি নির্ধারণ করে এবং অ্যাঙ্করিং টু টপ এবং বটম তার উচ্চতা সম্পত্তি সেট করবে।
এই সমাধান, সি # হিসাবে:
label.Anchor = AnchorStyles.Left | AnchorStyles.Right;
label.AutoSize = true;
আপনি যদি সত্যই লিখিত প্রস্থটি সামগ্রীর থেকে আলাদা করতে চান তবে আমি দেখতে পাচ্ছি যে সবচেয়ে সহজ উপায় এটি:
এখন লেবেলটি ধ্রুব প্রস্থের হয় তবে এটি স্বয়ংক্রিয়ভাবে এর উচ্চতাটি গ্রহণ করে।
তারপরে গতিশীল পাঠ্যের জন্য, ফন্টের আকার হ্রাস করুন। প্রয়োজনে এই স্নিপেটটি সাব যেখানে লেবেল পাঠ্য সেট করা আছে সেখানে ব্যবহার করুন:
If Me.Size.Height - (Label12.Location.Y + Label12.Height) < 20 Then
Dim naam As String = Label12.Font.Name
Dim size As Single = Label12.Font.SizeInPoints - 1
Label12.Font = New Font(naam, size)
End If
এটি ইনপিট উইন্ডো নামে আমার ফর্মটিতে আমাকে সহায়তা করেছে: লেবেলের জন্য ডিজাইনার:
AutoSize = true;
Achors = Top, Left, Right.
private void InputWindow_Shown(object sender, EventArgs e) {
lbCaption.MaximumSize = new Size(this.ClientSize.Width - btOK.Width - btOK.Margin.Left - btOK.Margin.Right -
lbCaption.Margin.Right - lbCaption.Margin.Left,
Screen.GetWorkingArea(this).Height / 2);
this.Height = this.Height + (lbCaption.Height - btOK.Height - btCancel.Height);
//Uncomment this line to prevent form height chage to values lower than initial height
//this.MinimumSize = new Size(this.MinimumSize.Width, this.Height);
}
//Use this handler if you want your label change it size according to form clientsize.
private void InputWindow_ClientSizeChanged(object sender, EventArgs e) {
lbCaption.MaximumSize = new Size(this.ClientSize.Width - btOK.Width - btOK.Margin.Left * 2 - btOK.Margin.Right * 2 -
lbCaption.Margin.Right * 2 - lbCaption.Margin.Left * 2,
Screen.GetWorkingArea(this).Height / 2);
}
এই সমস্যার সহজ উত্তর হ'ল লেবেলের ডক সম্পত্তি পরিবর্তন করা। এটি ডিফল্টরূপে "NONE" নয়।
আপনি যদি লেবেলে আগে থেকে পাঠ্য প্রবেশ করিয়ে থাকেন তবে আপনি এটি করতে পারেন।
style="overflow:Scroll"
নীচের HTML হিসাবে লেবেলে ব্যবহার করুন । এটি প্যানেলে লেবেলে স্ক্রোল বারটি যুক্ত করবে।
<asp:Label
ID="txtAOI"
runat="server"
style="overflow:Scroll"
CssClass="areatext"
BackColor="White"
BorderColor="Gray"
BorderWidth="1"
Width = "900" ></asp:Label>