PDA

View Full Version : محدود کردن تعداد سطرهای یک تکس باکس



samiasoft
سه شنبه 01 مرداد 1392, 19:16 عصر
چگونه میتوان یک تکس باکس را محدود کرد به طوری که برای مثال تا سطر 15 بتوان داخل ان متن نوشت؟

samiasoft
سه شنبه 01 مرداد 1392, 22:19 عصر
دوستان اگر در این باره اطلاعاتی دارید کمکم کنین:لبخندساده:

هرکاری کردم برای محدود کردن سطر به نتیجه ای نرسیدم:متفکر:

HidDeN_OutX.Exe
سه شنبه 01 مرداد 1392, 23:35 عصر
سلام دوست من

شما یه تايمر تعریف کنید که در زمان تغییر متن تکست باكس شروع کنه به انجام این کار :

1_با استفاده از خاصیت Lines تکس باکس محتویات هر سطر ارو تو عنصر آرایه (که باید تعریف کنید ) از نوع استرینگ بریزه

2_ اینجاش مشخصه دیگه :چشمک: چک کنه اگه تعداد عنصر های آرایه به 14 رسید

خاصیت OnlyRead تکس باکس رو True کنه . دیگه قابلیت نوشتاری نداشته باشه .

m.4.r.m
سه شنبه 01 مرداد 1392, 23:35 عصر
یه کاری راحت تر می تونی بکنی اینه که مثلا 15 سطر اطلاعات وارد کنی و طول 15 سطر رو بگیری و اون عدد رو بزاری تو Maxlenth

samiasoft
چهارشنبه 02 مرداد 1392, 00:28 صبح
یه کاری راحت تر می تونی بکنی اینه که مثلا 15 سطر اطلاعات وارد کنی و طول 15 سطر رو بگیری و اون عدد رو بزاری تو Maxlenth

منظورتون از بدست اوردن طول 15 سطر چی چیزی هست؟همون طول تکست باکس؟

m.4.r.m
چهارشنبه 02 مرداد 1392, 00:34 صبح
Private Sub Text1_Change()
Label1.Caption = Len(Text1)
If Len(Text1) = 180 Then
Text1.MaxLength = 180
End If
End Sub

این یه مثال بود 180 شما هر عددی رو می تونی بزاری میشه مثله پیامک دیگه 60 تا بیشتر میشه 1 اس ام اس و ..... باز خواستی بگو کمکت کنم

miladatashin
چهارشنبه 02 مرداد 1392, 00:48 صبح
یه کاری راحت تر می تونی بکنی اینه که مثلا 15 سطر اطلاعات وارد کنی و طول 15 سطر رو بگیری و اون عدد رو بزاری تو Maxlenth
با احترام به نظر دوستان ولی این روشهایی که ارایه شده عملی نیست. چون یا روش دوم مشخص نیست طول نوشته در هر سطر چه قدر میتونه باشه و ممکنه یوزر طول نوشته در هر سطر رو بخواد عوض کنه. روش اول هم اصلا منطقی نسیت که برای یک همچین کاری بخوای از تایمز استفاده کنی. تازه بعد اینکه به خط 15 رسید تکست باکس غیر فعال میشه و دیگه نمیشه سطرهای قبلی دو تغیر داد روشی که من پیشنهاد میکنم. در رویداد KeyPress تکست باکس چک کنید و هر وقط خط ها به تعداد 15 رسید اجازه ندیدن کاربر اینتر بزنه. اینم کدش

Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim MyNewLine As Variant
Dim NumofLine As Integer
MyNewLine = Split(Text1, vbNewLine)
NumofLine = UBound(MyNewLine) + 1
If (NumofLine >= 15) And (KeyAscii = 13) Then KeyAscii = 0
End Sub

mehran901
چهارشنبه 02 مرداد 1392, 18:46 عصر
چگونه میتوان یک تکس باکس را محدود کرد به طوری که برای مثال تا سطر 15 بتوان داخل ان متن نوشت؟

با استفاده از vbcr میتونین تعداد خطوط رو بشمارین و خیلی ساده وقتی در change event مورد استفاده قرار بگیره میتونه از بیشتر شدن تعداد سطر ها از 15 تا جلوگیری کنه ، توجه کنین که vbcrlf رو برای اینکار استفاده نکنین

vbhamed
پنج شنبه 03 مرداد 1392, 15:40 عصر
سلام دوست من

شما یه تايمر تعریف کنید که در زمان تغییر متن تکست باكس شروع کنه به انجام این کار :
1_با استفاده از خاصیت Lines تکس باکس محتویات هر سطر ارو تو عنصر آرایه (که باید تعریف کنید ) از نوع استرینگ بریزه
2_ اینجاش مشخصه دیگه :چشمک: چک کنه اگه تعداد عنصر های آرایه به 14 رسید
خاصیت OnlyRead تکس باکس رو True کنه . دیگه قابلیت نوشتاری نداشته باشه .

سلام
ايني كه گفتيد به چه زباني هست
TextBox ويژوال بيسيك نه خاصيت Lines داره نه OnlyRead البته به جاي OnlyRead خاصيت Locked رو داره

------------------------------------

همونطوري كه mehran901 (http://barnamenevis.org/member.php?269113-mehran901) عزيز گفتن با دستوري مشابه زير مي‌تونيد تعداد خطوط رو چك كنيد
Private Sub Text1_Change()

Dim s() As String

s = Split(Text1, vbCrLf)

If UBound(s) > 14 Then
'your code
End If

End Sub
به جاي yourcode مي‌تونيد مثلا متغيري رو تنظيم كنيد كه اگر در اينجا 1 شد، در متد KeyDown خاصيت KeyCode و در متد KeyPress خاصيت KeyAscii رو صفر كنيد تا نتونه چيزي اضافه كنه، يا اينكه هر چقدر اضافه كرد 15 خط اولش رو جايگزين كنيد

miladatashin
پنج شنبه 03 مرداد 1392, 19:33 عصر
همونطوري كه mehran901 (http://barnamenevis.org/member.php?269113-mehran901) عزيز گفتن با دستوري مشابه زير مي‌تونيد تعداد خطوط رو چك كنيد
Private Sub Text1_Change()

Dim s() As String

s = Split(Text1, vbCrLf)

If UBound(s) > 14 Then
'your code
End If

End Sub
به جاي yourcode مي‌تونيد مثلا متغيري رو تنظيم كنيد كه اگر در اينجا 1 شد، در متد KeyDown خاصيت KeyCode و در متد KeyPress خاصيت KeyAscii رو صفر كنيد تا نتونه چيزي اضافه كنه، يا اينكه هر چقدر اضافه كرد 15 خط اولش رو جايگزين كنيد

چه دلیلی داره یک متغیر اضافه به صورت سراسری تعریف کنیم تو رویداد Change بخواهیم یکش کنیم و باز در رویداد KeyPress یا KeyCode دوباره if بزاریم ؟!
هم مرتبه زمانی بالاتر میره(به خاطر یک if بیشتر)
هم حافظه بیشتر مصرف میشه (وجود یک متغیر دائمی ولو بولین 1 بتی)
هم کد نویسیمون پبچیده تر میشه
البته همه موارد بالا اون قدر کم که هست که در برنامه کوچیک تاثیر نداشته باشه ولی در برنام های سنگین به چشم میاد. به هر حال به نظر من همه این کارها اگه تو KeyPress انجام بشه بهینه تر هست. مثل کدی که تو پست 7 گفتم
و در اخر همه کدهای گفته شده در مورد وارد کردن مستقیم داخل textbox درست عمل میکنه. و اگه کاربر متنی رو داخل تکست باکس paste کنه که بیشتر از 15 خط باشه باز میشه از 15 خط بیشتر وارد تکست باکس کرد
اگه میخواهید اینطوری هم نشه بیشتر از 15 خط واد کرد میتونید از کد زیر استفاده کنید.
تو این کد 15 خط اول حفظ میشه و بقیه حذف(البته کد خیلی بهینه نیست و اجازه enter زدن بعد از 15 خط رو هم میده ولی خط 15 به بعد رو حذف میکنه اگه میخواهید این طوری نباشه دو روش رو با هم ترکیب کنید)

Private Sub Text1_Change()
Dim s() As String
s = Split(Text1, vbCrLf)
If (UBound(s) > 14) Then
Text1.Text = ""
For i = 0 To 13
Text1.Text = Text1.Text + s(i) + vbCrLf
Next i
Text1.Text = Text1.Text + s(14)
Text1.SelStart = Len(Text1)
End If
End Sub

vbhamed
جمعه 04 مرداد 1392, 00:41 صبح
چه دلیلی داره یک متغیر اضافه به صورت سراسری تعریف کنیم تو رویداد Change بخواهیم یکش کنیم و باز در رویداد KeyPress یا KeyCode دوباره if بزاریم ؟!
هم مرتبه زمانی بالاتر میره(به خاطر یک if بیشتر)
هم حافظه بیشتر مصرف میشه (وجود یک متغیر دائمی ولو بولین 1 بتی)
هم کد نویسیمون پبچیده تر میشه
البته همه موارد بالا اون قدر کم که هست که در برنامه کوچیک تاثیر نداشته باشه ولی در برنامه های سنگین به چشم میاد. به هر حال به نظر من همه این کارها اگه تو KeyPress انجام بشه بهینه تر هست. مثل کدی که تو پست 7 گفتم

سلام
دليلش اينه كه ما مي‌خوايم يك كار تميز انجام بشه، يعني وقتي 15 خط شد، برنامه اجازه اضافه كردن خط رو نده نه اينكه خط اضافه بشه بعد پاك بشه كه اينطوري يك حالت چشمكزن و ناخوش آيند روي تكست بوجود مياد
البته فعلا بحث بيشتر روي تشخيص تعداد خط بود و روش جلوگيري از تايپ تعداد خط بيشتر به عهده خود برنامه نويس گذاشته شد

miladatashin
جمعه 04 مرداد 1392, 10:35 صبح
سلام
دليلش اينه كه ما مي‌خوايم يك كار تميز انجام بشه، يعني وقتي 15 خط شد، برنامه اجازه اضافه كردن خط رو نده نه اينكه خط اضافه بشه بعد پاك بشه كه اينطوري يك حالت چشمكزن و ناخوش آيند روي تكست بوجود مياد
البته فعلا بحث بيشتر روي تشخيص تعداد خط بود و روش جلوگيري از تايپ تعداد خط بيشتر به عهده خود برنامه نويس گذاشته شد
سلام دوست عزیز. من در مقایسه کدی که تو پست 7 گذاشتم گفتم. تو اون کد هم به قول شما کار تمیز انجام شده. و مزیتش نسبت به روشی شما 1- یک if کمتر 2- عدم نیاز به متغیر سراسری 3- کوتاه تر بودن کد سورس

vbhamed
جمعه 04 مرداد 1392, 18:52 عصر
سلام دوست عزیز. من در مقایسه کدی که تو پست 7 گذاشتم گفتم. تو اون کد هم به قول شما کار تمیز انجام شده. و مزیتش نسبت به روشی شما 1- یک if کمتر 2- عدم نیاز به متغیر سراسری 3- کوتاه تر بودن کد سورس
سلام
دوست عزيز
منظور من از تميز بودن كار، اين بود كه كاربر نهايي در تكست باكس پرش نبينه، چون وقتي متن وارد بشه و بعد پاك بشه حالت پرش ايجاد ميشه و پياده سازي اينكار حتي ممكنه براي برنامه نويس زحمت بيشتري رو ايجاد كنه و نياز به كد طولاني تري داشته باشه ولي خروجي كار مهمه كه خوب در مياد

اما در كل ما اينجا مي‌خوايم به دوستامون كمك كنيم مشكلشون حل بشه نه اينكه بيايم جوابهامون رو با هم مقايسه كنيم كه جواب كي بهتره
بهتره ديگه راجع به اين موضوع صحبت نشه، شما هم هر كدي كه فكر مي‌كني بهتره بزار هيچ مشكلي نيست همه استقبال مي‌كنيم

محسن واژدی
شنبه 05 مرداد 1392, 09:53 صبح
سلام علیکم
کد پست زیر هم بررسی کنید:
http://barnamenevis.org/showthread.php?332045-%D8%B3%D8%A4%D8%A7%D9%84-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D8%B1%D8%A7%D8%B3%D8%AA-%DA%A9%D9%84%DB%8C%DA%A9-%D9%88-%D8%AA%DA%A9%D8%B3%D8%AA&p=1462743&viewfull=1#post1462743

برای مثال:

Private Sub Text1_KeyPress(KeyAscii As Integer)
Const iMAX_ALLOWED% = 10
Caption = GetLineCount(Text1) & "/" & GetCurLineIndex(Text1)
If ((GetLineCount(Text1) >= iMAX_ALLOWED%) And Not KeyAscii = vbKeyBack) Then
KeyAscii = 0
End If
End Sub

موفق باشید