رفتن به مطلب
  • 0

چگونه باید کلیک کاربر در ادیت تکست را دریافت کنیم؟


daria

سوال

سلام

باز هم عذرخواهی میکنم اگر سوالاتم پیش پا افتاده است. می خواستم جواب سوالاتم رو از روی کدهای کتابخانه های نوشته شده پیدا کنم اما بهم تذکر داده شد که این پایمال کردن حقوق برنامه نویس هست. پس دیگه طرفش نمیرم.

اگر ممکنه راهنماییم کنید. ممنون

من می خوام وقتی کاربر روی ادیت تکست کلیک میکنه یه کاری انجام بشه، مثل حالت sender در لیبل.

این sender برای ادیت تکست هم کار میکنه ، اما حتما باید دبل کلیک بشه، من می خوام فقط با یه بار کلیک همون عمل انجام بشه

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

8 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

جناب مدیر شرمنده، من متوجه منظورتون نمیشم.

آخه برای اینکه sender مشخصات رو بده باید حتما دبل کلیک بشه!

 

من یه کد نوشتم ، اینجا میذارمش، میشه لطفا چک کنید، ببینید توی این کد، من الان اگر بخوام با کلیک روی سلول سوم (فقط یک کلیک، نه دبل کلیک)، اول چک کنه ببینه عدد سلول چنده؟ بعد اگر مخالف 1 بود همه سلول های زیرش هم مساوی خودش بشه، باید چکار کنم؟

(با این توضیح که zaraieb.csv یک فایل با دوازده ستون و بیست ردیف می باشد)

 

Sub Process_Globals
	Dim StringUtils1 As StringUtils
End Sub

Sub Globals
	Dim SV As ScrollView
	Dim Table As Panel
	Dim NumberOfColumns, RowHeight, ColumnWidth As Int
	Dim  TableColor, FontColor As Int
	Dim FontSize As Float
	Type RowCol (Row As Int, Col As Int)
	Dim Alignment As Int
	
	
	NumberOfColumns = 12 
	RowHeight = 10%y
	TableColor = Colors.White
	FontColor = Colors.Black
	FontSize = 11
	Alignment = Gravity.CENTER 
End Sub

Sub Activity_Create(FirstTime As Boolean)
	SV.Initialize(0)
	Table = SV.Panel
	Table.Color = TableColor
	Activity.AddView(SV, 5%x, 10%y, 90%x, 80%y)
	ColumnWidth = SV.Width/NumberOfColumns
	LoadTableFromCSV(File.DirAssets, "zaraieb.csv", True)
End Sub


Sub LoadTableFromCSV(Dir As String, Filename As String, HeadersExist As Boolean)
	Dim List1 As List
	Dim h() As String
		List1 = StringUtils1.LoadCSV(Dir, Filename, ",")
		Dim firstRow() As String
		firstRow = List1.Get(0)
		Dim h(firstRow.Length) As String
		For i = 0 To firstRow.Length - 1
			h(i) = "Col" & (i + 1)
		Next
	ColumnWidth = SV.Width / NumberOfColumns 
	For i = 0 To List1.Size - 1
		Dim row() As String
		row = List1.Get(i)
		AddRow(row)
	Next
End Sub


Sub AddRow(Values())
	If Values.Length <> NumberOfColumns Then
		Log("Wrong number of values.")
		Return
	End If
	Dim lastRow As Int
	lastRow = NumberOfRows
	For i = 0 To NumberOfColumns - 1
		If i=0 Or i=NumberOfColumns-1 Then
			Dim l1 As Label
			l1.Initialize("cell")
			l1.Text = Values(i)
			l1.Gravity = Alignment
			l1.TextSize = FontSize
			l1.TextColor = FontColor
			Dim rc As RowCol
			rc.Initialize
			rc.Col = i
			rc.Row = lastRow
			l1.Tag = rc
			Table.AddView(l1, ColumnWidth * i, RowHeight * lastRow, ColumnWidth, RowHeight)
		Else
			Dim l As EditText
			l.Initialize("cell")
			l.Text = Values(i)
			l.Gravity = Alignment
			l.TextSize = FontSize
			l.TextColor = FontColor
			Dim rc As RowCol
			rc.Initialize
			rc.Col = i
			rc.Row = lastRow
			l.Tag = rc
			Table.AddView(l, ColumnWidth * i, RowHeight * lastRow, ColumnWidth, RowHeight)
		End If
	Next
	Table.Height = NumberOfRows * RowHeight
End Sub

Sub Cell_Click
	Dim rc As RowCol	
	Dim l As View
	l = Sender
	rc = l.Tag
	Activity.Title = "Cell clicked: (" & rc.Row & ", " & rc.Col & ")"	
End Sub

Sub NumberOfRows As Int
	Return Table.NumberOfViews / NumberOfColumns
End Sub

 

اونجایی که داری تعریف می کنی ادیت تکس رو می تونی اضافه کنی :

l.tag = i + 1

و درقسمت رویداد کلیک ادیت تکست اینطوری بنویسی :

Sub Cell_Click
        Dim et as edittext = sender
	if et.tag = "3" then
             log(et.text)
        end if
        ''''''''
End Sub

اگر از حلقه تو در تو استفاده کردی، باید Tag خودت رو به صورت i + j*100 مثلا تعریف کنی و وقتی که در رویداد کلیک هستی اون ها رو دوباره به فرم i و j برگردونی.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

خیلی خیلی خیلی ممنونم  :dance2:

به شدت کارم راه افتاد .  بینهایت سپاسگذارم. :give_rose:

 

یه سوال، برای وارد کردن جدول راه آسون تری هم هست؟  :malih:   من دارم یه برنامه مینویسم که توی اکثر صفحاتش باید از جدول استفاده کنم ، اگر قرار باشه واسه همه اینطوری جدول رو لود کنم فکر میکنم برنامه ام سنگین بشه  :fekr:

واقعا خوشحالم از این بابت. چون خودم هم چند وقتی درگیر این سوال شما بودم.

 

نکته اینه که شما خودتون باید تشخیص بدید که برنامه تون قراره مجموعه ای از Activity ها باشه (که شما بهش صفحه می گید) یا می تونه از Layout هایی تشکیل شود (لایه ها) که با توجه به دکمه هایی که کاربر کلیک می کنه، به صورت واکنش گرا و از طریق مثلا یک تابع جدید که به برنامه تون اضافه می کنید، این لایه ها تغییر بکنن و بتونه جلوی سنگین شدن برنامه رو بگیره. هر چند استفاده از سبک (لایه) به طبع باعث پیچیدگی برنامه می شه. بازم تاکید می کنم ک فک کنم خودتون بهتر بتونید این تشخیص رو بدید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

Sub edittext1_FocusChanged (HasFocus As Boolean)
    
End Sub

 

ممنون از پاسختون ، اما مشکل من اینجاست که ادیت تکستم اسم نداره ، من یه عالمه ادیت تکست دارم که با چند تا حلقه فور وارد لایوت شدن.  وقتی از دستور sender برای لیبل استفاده میشه ، دیگه لازم نیست اون لیبل اسم داشته باشه، فقط کافیه روش کلیک بشه ... اما برای استفاده از این دستور نیازه که به تک تک ادیت تکست هام اسم بدم !!!

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ممنون از پاسختون ، اما مشکل من اینجاست که ادیت تکستم اسم نداره ، من یه عالمه ادیت تکست دارم که با چند تا حلقه فور وارد لایوت شدن.  وقتی از دستور sender برای لیبل استفاده میشه ، دیگه لازم نیست اون لیبل اسم داشته باشه، فقط کافیه روش کلیک بشه ... اما برای استفاده از این دستور نیازه که به تک تک ادیت تکست هام اسم بدم !!!

برا اینم از sender استفاده کن مشکلی نیس که

با حلقه هم ادد کنی یه اسم داره بلاخره دگ

لینک ارسال
به اشتراک گذاری در سایت های دیگر

جناب مدیر شرمنده، من متوجه منظورتون نمیشم.

آخه برای اینکه sender مشخصات رو بده باید حتما دبل کلیک بشه!
 
من یه کد نوشتم ، اینجا میذارمش، میشه لطفا چک کنید، ببینید توی این کد، من الان اگر بخوام با کلیک روی سلول سوم (فقط یک کلیک، نه دبل کلیک)، اول چک کنه ببینه عدد سلول چنده؟ بعد اگر مخالف 1 بود همه سلول های زیرش هم مساوی خودش بشه، باید چکار کنم؟

(با این توضیح که zaraieb.csv یک فایل با دوازده ستون و بیست ردیف می باشد)
 

Sub Process_Globals
	Dim StringUtils1 As StringUtils
End Sub

Sub Globals
	Dim SV As ScrollView
	Dim Table As Panel
	Dim NumberOfColumns, RowHeight, ColumnWidth As Int
	Dim  TableColor, FontColor As Int
	Dim FontSize As Float
	Type RowCol (Row As Int, Col As Int)
	Dim Alignment As Int
	
	
	NumberOfColumns = 12 
	RowHeight = 10%y
	TableColor = Colors.White
	FontColor = Colors.Black
	FontSize = 11
	Alignment = Gravity.CENTER 
End Sub

Sub Activity_Create(FirstTime As Boolean)
	SV.Initialize(0)
	Table = SV.Panel
	Table.Color = TableColor
	Activity.AddView(SV, 5%x, 10%y, 90%x, 80%y)
	ColumnWidth = SV.Width/NumberOfColumns
	LoadTableFromCSV(File.DirAssets, "zaraieb.csv", True)
End Sub


Sub LoadTableFromCSV(Dir As String, Filename As String, HeadersExist As Boolean)
	Dim List1 As List
	Dim h() As String
		List1 = StringUtils1.LoadCSV(Dir, Filename, ",")
		Dim firstRow() As String
		firstRow = List1.Get(0)
		Dim h(firstRow.Length) As String
		For i = 0 To firstRow.Length - 1
			h(i) = "Col" & (i + 1)
		Next
	ColumnWidth = SV.Width / NumberOfColumns 
	For i = 0 To List1.Size - 1
		Dim row() As String
		row = List1.Get(i)
		AddRow(row)
	Next
End Sub


Sub AddRow(Values())
	If Values.Length <> NumberOfColumns Then
		Log("Wrong number of values.")
		Return
	End If
	Dim lastRow As Int
	lastRow = NumberOfRows
	For i = 0 To NumberOfColumns - 1
		If i=0 Or i=NumberOfColumns-1 Then
			Dim l1 As Label
			l1.Initialize("cell")
			l1.Text = Values(i)
			l1.Gravity = Alignment
			l1.TextSize = FontSize
			l1.TextColor = FontColor
			Dim rc As RowCol
			rc.Initialize
			rc.Col = i
			rc.Row = lastRow
			l1.Tag = rc
			Table.AddView(l1, ColumnWidth * i, RowHeight * lastRow, ColumnWidth, RowHeight)
		Else
			Dim l As EditText
			l.Initialize("cell")
			l.Text = Values(i)
			l.Gravity = Alignment
			l.TextSize = FontSize
			l.TextColor = FontColor
			Dim rc As RowCol
			rc.Initialize
			rc.Col = i
			rc.Row = lastRow
			l.Tag = rc
			Table.AddView(l, ColumnWidth * i, RowHeight * lastRow, ColumnWidth, RowHeight)
		End If
	Next
	Table.Height = NumberOfRows * RowHeight
End Sub

Sub Cell_Click
	Dim rc As RowCol	
	Dim l As View
	l = Sender
	rc = l.Tag
	Activity.Title = "Cell clicked: (" & rc.Row & ", " & rc.Col & ")"	
End Sub

Sub NumberOfRows As Int
	Return Table.NumberOfViews / NumberOfColumns
End Sub
لینک ارسال
به اشتراک گذاری در سایت های دیگر

 

اونجایی که داری تعریف می کنی ادیت تکس رو می تونی اضافه کنی :

l.tag = i + 1

و درقسمت رویداد کلیک ادیت تکست اینطوری بنویسی :

Sub Cell_Click
        Dim et as edittext = sender
	if et.tag = "3" then
             log(et.text)
        end if
        ''''''''
End Sub

اگر از حلقه تو در تو استفاده کردی، باید Tag خودت رو به صورت i + j*100 مثلا تعریف کنی و وقتی که در رویداد کلیک هستی اون ها رو دوباره به فرم i و j برگردونی.

 

خیلی خیلی خیلی ممنونم  :dance2:

به شدت کارم راه افتاد .  بینهایت سپاسگذارم. :give_rose:

 

یه سوال، برای وارد کردن جدول راه آسون تری هم هست؟  :malih:   من دارم یه برنامه مینویسم که توی اکثر صفحاتش باید از جدول استفاده کنم ، اگر قرار باشه واسه همه اینطوری جدول رو لود کنم فکر میکنم برنامه ام سنگین بشه  :fekr:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

واقعا خوشحالم از این بابت. چون خودم هم چند وقتی درگیر این سوال شما بودم.

 

نکته اینه که شما خودتون باید تشخیص بدید که برنامه تون قراره مجموعه ای از Activity ها باشه (که شما بهش صفحه می گید) یا می تونه از Layout هایی تشکیل شود (لایه ها) که با توجه به دکمه هایی که کاربر کلیک می کنه، به صورت واکنش گرا و از طریق مثلا یک تابع جدید که به برنامه تون اضافه می کنید، این لایه ها تغییر بکنن و بتونه جلوی سنگین شدن برنامه رو بگیره. هر چند استفاده از سبک (لایه) به طبع باعث پیچیدگی برنامه می شه. بازم تاکید می کنم ک فک کنم خودتون بهتر بتونید این تشخیص رو بدید.

ممنون از راهنماییتون.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...