PDA

View Full Version : سوال: قابلیت استفاده از کنترل های دارای تگ در Net.



Rink.e
دوشنبه 18 خرداد 1388, 10:08 صبح
با عرض سلام خدمت دوستان

-من با یکسری کد، کنترل هایی که دارای تگ هستند را جمع آوری و اطلاعات موجود در خاصیت Text آنها را می گیرم و عملیات خاصی را انجام می دهم.
اگر کنترلی تنها روی فرم ایجاد شده باشد خوب کار می کند اما::::

حالا::
من تعدادی کنترل را داخل Groupbox ایجاد کرده ام.
هر کدام کنترل ها دارای تگ هستند، و تگ آنها مقدار دهی شده است. حالا برای استفاده ، چون کنترل ها در Framebox هستند نمیشه کنترل هایی که دارای تگ هستند اطلاعات Text آنها را گرفت علت چیست و راه حل آن؟


این سوال بالا در کنترل Tabcontrol نیز صادق است.

از دوستانی که راه حلی دارند راه حل را بیان کنند ممنون همه شما عزیزان هستم.

با احترام

mohsen_csharp
دوشنبه 18 خرداد 1388, 10:48 صبح
دوست عزیز کدی که شما نوشتی چیست؟
اصولا نباید مشکلی باشد
شاید اصلا این کنترل ها به متد شما پاس نمی شوند چون داخل فریم هستند.
لطفا کد بگذارید.

Rink.e
دوشنبه 18 خرداد 1388, 11:08 صبح
دوست عزیز کدی که شما نوشتی چیست؟
اصولا نباید مشکلی باشد
شاید اصلا این کنترل ها به متد شما پاس نمی شوند چون داخل فریم هستند.
لطفا کد بگذارید.

فرض کنید سه کنترل TextBox روی فرم ایجاد کرده ایم به نام های : Textbox1,Textbox2,Textbox3

مقادیر تگ ها به ترتیب:/name/,/family/,/fname/

کد تابع:


Public Sub Fillform(ByVal d As DataTable, ByVal filds As String, ByVal con As Form.ControlCollection)
filds = filds.Replace("=", ",")
filds = filds.Replace("'", "")
filds = filds.Replace(" ", "")
Dim f() As String = Split(filds, ",")

For Each o As Object In con
If Not (o.tag Is Nothing) AndAlso CStr(o.tag)(0) = "/" Then
For i As Int32 = 1 To f.Length Step 2
If CStr(o.tag) = f(i) Then
If Not (TypeOf d.Rows(0)(f(i - 1)) Is DBNull) Then
o.text = CStr(d.Rows(0)(f(i - 1))).Trim
Else
o.text = ""
End If
End If
Next
End If
Next
End Sub
فراخواننده تابع و پارامتر ها به محض load فرم:


Public Overloads Sub ShowDialog(ByVal i As Integer)

editm = True
idd = i
Dim dt As DataTable = DAC.GetData("select * from TBLNAME where id=" & idd)
Fillform(dt, "name='/name/',family='/family/',fname='/fname/'", Controls)
Text = "ویرایش "



Me.ShowDialog()
End Sub


توضیح:
آرگومان دوم تابع Fillform:
نام فیلد=نام تگ می باشد.

با احترام

davoodrm666_666
دوشنبه 18 خرداد 1388, 12:35 عصر
به جای for each از while زیر استفاده کن


Dim Obj As Object = Nothing
Obj = Me.GetNextControl(Obj, True)
While Not (Obj Is Nothing)
.
.
.
Obj = Me.GetNextControl(Obj, True)
End While

حامد مصافی
دوشنبه 18 خرداد 1388, 12:51 عصر
هر یک از کنترل های Panel, GroupBox یا ... یک Container برای سایر کنترل های تحت ولایت خودشان هستند، لذا شما باید مجدداً عمل جستجو را روی کنترل های این کنترل ها نیز انجام دهید و چون عمق ولایت یک کنترل مشخص نیست می توانید این کار را از ظریق توابع بازگشتی انجام دهید. مثال:


Public Sub GetAllControlsList(ByVal f As Form)
For Each c As Control In f.Controls
MessageBox.Show(c.name)
BrowseControl(c)
Next
End Sub
Private Sub BrowseControl(ByVal con As Control)
For Each c As Control In con.Controls
MessageBox.Show(c.name)
BrowseControl(c)
Next
End Subبرای نتیجه دستور زیر را اجرا کنید:

GetAllControlsList (Me)