PDA

View Full Version : سوال: حذف متن خالی انتهای تکست باکس



SHD.NET
دوشنبه 18 دی 1391, 20:51 عصر
سلامو ..
در خصوص موضوع تاپیک نمیدونستم چی دیگه انتخاب کنم . بهترین موضوعی که به ذهنم رسید همین بود :لبخند:
و اما سوال :

مثلا ما یه تکست باکس با عرض 500 داریم، اونوقت متنی رو داخلش میخوایموارد نمی کنیم که نمیدونیم متنش چند کاراکتره
میخوایم وقتی اون متن مثلا 300 تا از عرض تکست باکس رو پر کرد ، مقدار حالی باقی مونده حذف بشه.
یعنی یع چیز تو مایه های AutoSize . نمیدونم منظورمو خوب رسوندم یا نه .

ممنون

ara_tz
دوشنبه 18 دی 1391, 21:11 عصر
سلام
منکه نفهمیدم چی گفتی! :قهقهه:
ولی اگر میخوای اندازه تکست باکست به اندازه ای که آخرین بار متنتو وارد کردی تغییر کنه میتونی یه دکمه بزاری که وقتی متنو وارد کردی، اندازه متنتو پیدا کنه و سایز تکست باکستو به اون اندازه ست کنه!

behzad_rainy
دوشنبه 18 دی 1391, 21:14 عصر
میتونی یه label ایجاد کنی بعد متن داخل textbox رو بزاری داخل label بعد سایز label هرچی بود سایز تکس باکس رو همون قرار بدی

System.Windows.Forms.Label lbl = new System.Windows.Forms.Label();
البته یه راه دیگه اینه که از گرافیک استفداه کنی و عرض پیکسل ها رو بدست بیاری ولی راه حل اول خیلی راحت تره:چشمک:

behzad_rainy
دوشنبه 18 دی 1391, 21:16 عصر
اینم میتونه کمکت کنه



protected override OnTextChanged(EventArgs e) {
using (Graphics g = CreateGraphics()) { SizeF size = g.MeasureString(Text, Font);
Width = (int)Math.Ceiling(size.Width);
} base.OnTextChanged(e);
}

SHD.NET
دوشنبه 18 دی 1391, 21:17 عصر
سلام
منکه نفهمیدم چی گفتی! :قهقهه:
ولی اگر میخوای اندازه تکست باکست به اندازه ای که آخرین بار متنتو وارد کردی تغییر کنه میتونی یه دکمه بزاری که وقتی متنو وارد کردی، اندازه متنتو پیدا کنه و سایز تکست باکستو به اون اندازه ست کنه!

دقیقا منظورم همین بود

SHD.NET
دوشنبه 18 دی 1391, 21:32 عصر
میتونی یه label ایجاد کنی بعد متن داخل textbox رو بزاری داخل label بعد سایز label هرچی بود سایز تکس باکس رو همون قرار بدی

System.Windows.Forms.Label lbl = new System.Windows.Forms.Label();
البته یه راه دیگه اینه که از گرافیک استفداه کنی و عرض پیکسل ها رو بدست بیاری ولی راه حل اول خیلی راحت تره:چشمک:

وقتی آتوسایز لیبل رو False کنم . دیگه اون تموم متنش توی یک خط نوشته میشه و نمیشه ازش برای این کار استفاده کرد

چی کا کنم . ؟؟ خودتون میشه یه نمونه بزارین ؟
اون کد هم به هم ریخته نشون میده . اگه با اون میشه مشکلو حل کرد لطفا یه بار دیگه بزاریدش

behzad_rainy
دوشنبه 18 دی 1391, 21:39 عصر
const int width = 100;
private void textBox1_TextChanged(object sender, EventArgs e)
Font font = new Font(txt.Font.Name, txt.Font.Size);
Size s = TextRenderer.MeasureText(txt.Text, font);
if (s.Width > width)
{
txt.Width = s.Width;
}
}

behzad_rainy
دوشنبه 18 دی 1391, 21:44 عصر
اینجوری متنت نسبت به اندازه تکس باکست کوچیک میشه یعنی اندازه تکس باکست ثابته

SHD.NET
دوشنبه 18 دی 1391, 22:09 عصر
اینجوری متنت نسبت به اندازه تکس باکست کوچیک میشه یعنی اندازه تکس باکست ثابته

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

میخوام طول ثابت باشه و فقط عرضش تغییر کنه

asghar2008
دوشنبه 18 دی 1391, 22:50 عصر
حالا نمیشه یه کاری کرد که فقط عرض تکست باکسی نسبت به متن کوچیک و بزرگ بشه ؟؟

میخوام طول ثابت باشه و فقط عرضش تغییر کنه

سلام

اول طول متن رو بدست بیار و بعد مساوی طول تکست باکس قرار بده.

شاید این بدرد بخوره
Dim s As Integer
s = TextBox1.TextLength + 1
TextBox1.Width = s

SHD.NET
دوشنبه 18 دی 1391, 23:19 عصر
سلام

اول طول متن رو بدست بیار و بعد مساوی طول تکست باکس قرار بده.

شاید این بدرد بخوره
Dim s As Integer
s = TextBox1.TextLength + 1
TextBox1.Width = s

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

SHD.NET
دوشنبه 18 دی 1391, 23:20 عصر
آقا کسی نبود ؟؟

shahryari
سه شنبه 19 دی 1391, 10:03 صبح
تقدم شما

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Dim s As Size = TextRenderer.MeasureText(TextBox1.Text, TextBox1.Font)
TextBox1.Width = s.Width
End Sub

طول تکست باکست براساس طول متنت تنظیم میشه

SHD.NET
سه شنبه 19 دی 1391, 11:11 صبح
تقدم شما

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Dim s As Size = TextRenderer.MeasureText(TextBox1.Text, TextBox1.Font)
TextBox1.Width = s.Width
End Sub

طول تکست باکست براساس طول متنت تنظیم میشه

داداش من میخوام طول ثابت باشه و فقط عرض تغییر کنه !!!
اینی که شما نوشتی طول رو تغییر میده که من میخوام عرض تغییر کنه !

ممنون میشم اگ اینم ج بدی

SHD.NET
سه شنبه 19 دی 1391, 12:00 عصر
یه فکری به ذهنم رسید !! میشه تعداد لاین های تکست باکس رو درآورد . بعدشم با توجه به اون عرضش رو تنظیم کرد !!!

SHD.NET
سه شنبه 19 دی 1391, 12:01 عصر
دوستان بالاخره معما حل شد !!!!
با این دستورات تونستم درستش کنم . البته این دستورات به مقدار خیلی خیلی خیلی کم نقص داره . اما کار من باهاش راه افتاد !!

Public Class Form1
Public ArZ As Integer

Private Function CountLines() As Integer
Dim g As Graphics = TextBox1.CreateGraphics()
Dim sf As StringFormat = DirectCast(System.Drawing.StringFormat.GenericTypo graphic.Clone(), StringFormat)
sf.Alignment = StringAlignment.Near
sf.FormatFlags = StringFormatFlags.NoClip
Dim charCount As Integer
Dim lineCount As Integer
Call g.MeasureString(TextBox1.Text, TextBox1.Font, New SizeF(TextBox1.Width, TextBox1.Height), sf, charCount, lineCount)
g.Dispose()
Return lineCount
End Function


Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
TextBox1.Multiline = False
ArZ = TextBox1.Height
TextBox1.Multiline = True
End Sub

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Dim a As Integer = CountLines() / 4

TextBox1.Height = ArZ * (CountLines() - a)
End Sub


:چشمک: \\\موفق باشید ///:چشمک:

shahryari
سه شنبه 19 دی 1391, 14:57 عصر
دوستان بالاخره معما حل شد !!!!
با این دستورات تونستم درستش کنم . البته این دستورات به مقدار خیلی خیلی خیلی کم نقص داره . اما کار من باهاش راه افتاد !!

Public Class Form1
Public ArZ As Integer

Private Function CountLines() As Integer
Dim g As Graphics = TextBox1.CreateGraphics()
Dim sf As StringFormat = DirectCast(System.Drawing.StringFormat.GenericTypo graphic.Clone(), StringFormat)
sf.Alignment = StringAlignment.Near
sf.FormatFlags = StringFormatFlags.NoClip
Dim charCount As Integer
Dim lineCount As Integer
Call g.MeasureString(TextBox1.Text, TextBox1.Font, New SizeF(TextBox1.Width, TextBox1.Height), sf, charCount, lineCount)
g.Dispose()
Return lineCount
End Function


Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
TextBox1.Multiline = False
ArZ = TextBox1.Height
TextBox1.Multiline = True
End Sub

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Dim a As Integer = CountLines() / 4

TextBox1.Height = ArZ * (CountLines() - a)
End Sub


:چشمک: \\\موفق باشید ///:چشمک:

:متفکر:

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Dim s As Size = TextRenderer.MeasureText(TextBox1.Text, TextBox1.Font)
If s.Height < 21 Then
TextBox1.Height = 21
Else
TextBox1.Height = s.Height
End If
End Sub

SHD.NET
سه شنبه 19 دی 1391, 15:07 عصر
:متفکر:

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Dim s As Size = TextRenderer.MeasureText(TextBox1.Text, TextBox1.Font)
If s.Height < 21 Then
TextBox1.Height = 21
Else
TextBox1.Height = s.Height
End If
End Sub

ممنون . این کد راحت تر و کوچیک تر بود . ولی خط اول رو مخفی میکنه وقتی اینتر رو میزنیم . فقط با خط اول مشکل داره

shahryari
سه شنبه 19 دی 1391, 16:52 عصر
این مشکلت رو حل میکنه

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
If (TextBox1.TextLength > 0) Then
TextBox1.ClientSize = New Size(TextBox1.ClientSize.Width, Convert.ToInt32((TextBox1.Lines.Length * TextBox1.Font.Height) + (TextBox1.Font.Height * 0.5)))
Else
TextBox1.ClientSize = New Size(TextBox1.ClientSize.Width, Convert.ToInt32(TextBox1.Font.Height + (TextBox1.Font.Height * 0.5)))
End If
End Sub