PDA

View Full Version : مشكل در استفاده از يك كنترل(RichTextBox)



Parham.D
جمعه 14 تیر 1387, 18:12 عصر
پست قبلي خراب شد. من را ببخشيد ، اين اولين پست مستقيم من هست !! دوستان يك كنترل TabControl دارم كه در حال اجرا برنامه به اون TabPage اضافه ميكنم و به هر TabPage يك RichTextBox اضافه مي‏كنم. با كمك For Each به هر RichTextBox دسترسي پيدا مي‏كنم و آن را تغيير ميدهم. مشكل من اين هست كه نمي‏تونم براي هر ‏RichTextBox رويداد تعريف كنم. اگر با حالت WithEvent بخواهم از For Each استفاده كنم به من پيغام خطا ميده. لطفا كمك كنيد.






PrivateWithEvents GetControl AsNew RichTextBox





For Each GetControl In Me.TabPages.SelectedTab.Controls

If TypeOf GetControl Is RichTextBox Then

If GetControl.Name = "NotePage1" Then

If BoldTSB.Checked = False Then

BoldTSB.Checked = True ' Push the bold button on

NotePage1.SelectionFont = New Font(NotePage1.Font.FontFamily, NotePage1.Font.Size, FontStyle.Bold

Else

BoldTSB.Checked = False ' Push the bold button off.

NotePage1.SelectionFont = New Font(NotePage1.Font.FontFamily, NotePage1.Font.Size, FontStyle.Regular)

End If

Else

If BoldTSB.Checked = False Then

BoldTSB.Checked = True ' Push the bold button on

GetControl.SelectionFont = New Font(GetControl.Font.FontFamily, GetControl.Font.Size, FontStyle.Bold)

Else

BoldTSB.Checked = False ' Push the bold button off

GetControl.SelectionFont = New Font(GetControl.Font.FontFamily, GetControl.Font.Size, FontStyle.Regular)

End If

End If

End If
Next



Error 1 Loop control variable cannot be a property or a late-bound indexed array.

Sub Zero
شنبه 15 تیر 1387, 11:27 صبح
مشكل من اين هست كه نمي‏تونم براي هر ‏RichTextBox رويداد تعريف كنم.
ممکنه بگید برای چی نمی تونید .
شما چه کاری رو میخواید در حلقه انجام بدید .

Parham.D
یک شنبه 16 تیر 1387, 07:22 صبح
من در حلقه For Each به كنترل RichTextBox كه در حين اجرا ساخته شده دسترسي پيدا ميكنم و مثلا نوشته داخل آن را Bold ميكنم. ولي نميتوانم براي آن Event تعريف كنم مثل RichTextBox_click تا بتونم با كليك روي آن مثلا پيغامي بدهد. اگر آن كنترل را با WithEvent تعريف كنم توي حلقه For Each ايراد ميگيره كه error را گذاشتم در بالا.


ممنون از توجه شما.

Sub Zero
یک شنبه 16 تیر 1387, 10:11 صبح
چون در زمان اجرا RichTextBox رو به فرم اضافه میکنی از پروسیجر زیر استفاده کن :

Sub Add_handler(ByVal Controls As Control)
For Each cnt As Control In Controls.Controls

If cnt.HasChildren Then
Add_handler(cnt)
Else
If TypeOf cnt Is TextBox Or TypeOf cnt Is ComboBox Then
AddHandler cnt.Enter, AddressOf Process_Enter
AddHandler cnt.Leave, AddressOf Process_Leave
End If

AddHandler cnt.KeyDown, AddressOf Process_KeyDown
End If
Next
End Sub
------ کلماتی که رنگی هستند رو به دلخواه خودت عوض کن ------
برای فراخوانی هم به این شکل استفاده کن :

Add_handler (Me.TabPages.SelectedTab.Controls)
توجه داشته باش که AddressOf Process_Enter آدرس پروسیجری که برای تغییر نوشتی رو به رویداد مورد نظر میده . مثلا من برای تمامی TexBox هایی که در فرم دارم این رویداد رو اضافه کردم . تا زمانی که فوکوس بر روی TextBox مورد نظر میاد BackColor کنترل عوض بشه .

Sub Process_Enter(ByVal sender As Object, ByVal e As EventArgs)
DirectCast(sender, Control).BackColor = Color.PaleGoldenrod
If TypeOf sender Is TextBox Then
CType(sender, TextBox).SelectAll()
End If
End Sub

Parham.D
دوشنبه 17 تیر 1387, 15:13 عصر
دوست عزيز با سپاس از لطف و توجه شما بايد بگم كه كدهاي شما بسيار خوب بودنند و من كلي چيز ياد گرفتم. اما مشكل اين هست كه Add handler را كجا فراخواني كنم. من مي‏خوام زماني كه بر روي RichTextBox كه در زمان اجرا اضافه شده كليك كنيم يك پيغام بده. اين وسط چه واسطي بايد وجود داشته باشه؟ مثلا اگر در حالت Form_Load فراخواني كنم رويداد كليك داخل Add_handel يك بار اجرا ميشه. ولي اين كافي نيست، نياز من فراخواني اين رويداد هر زمان است كه بر روي RichTextBox كه در زمان اجرا ساخته شده كليك كنم. با سپاس از همكاري شما.:ناراحت:

Parham.D
سه شنبه 18 تیر 1387, 08:46 صبح
كاربران دائمي و متخصص، لطفا من را راهنمايي كنيد. نبود كسي؟!! گير كردم حسابي.

Sub Zero
سه شنبه 18 تیر 1387, 10:12 صبح
مشكل اين هست كه Add handler را كجا فراخواني كنم. من مي‏خوام زماني كه بر روي RichTextBox كه در زمان اجرا اضافه شده كليك كنيم يك پيغام بده.
مگه نمی گید RichTextBox در زمان اجرا اضافه می شه ، خوب همون جا Add handler رو اضافه کنید .:
Dim RichTxt1 As New RichTextBox
With RichTxt1
.Font=Your Font
.Size = New Size(X, Y)
Addhandler .Click Addressof RichTxt_Click
End With
توی بلوک With تمام خاصیتهای مربوط به کنترلتون رو تنظیم کنید. وبعد هندل مورد نظر رو تعریف کنید . (RichTxt_Click پروسیجریه که خودتون نوشتین)

مثلا اگر در حالت Form_Load فراخواني كنم رويداد كليك داخل Add_handel يك بار اجرا ميشه. ولي اين كافي نيست، نياز من فراخواني اين رويداد هر زمان است كه بر روي RichTextBox كه در زمان اجرا ساخته شده كليك كنم
اشتباه نکنید برای هر کنترل و برای هر رویدادش فقط یک بار کافیه هندل مورد نظر و تعریف کنید.