Nesne Değer Girme
Bu yazımda sizlere Textbox, Numericupdown gibi nesnelere değer girmek için kullanacağınız InputBox özelliğinden bahsedeceğim. NumericUpDown kullanıldığında Text özelliği yerine Value özelliği kullanılmalıdır. InputBox, Dat Net’in değer girme penceresidir. Bu pencere açılmadan önce girilen üç değeri gösterir.
myValue = InputBox(“TextBox_0 değerini yazınız:” , “TextBox Değer Girme” , sender.Text)
Yukarıda görüldüğü gibi “TextBox_0 değerini yazınız:” açıklama allanıdır. “TextBox Değer Girme” bu kısım ise başlık alanıdır. sender.Text ise başlangıçta göstereceği değer alanıdır. Bu parametreler ile açılan inputBox cancel butonuna tıklandığında boş bir string döndürür. Bu nedenle kodumuzda boş string görüldüğünde fonksiyonu bitiren aşağıdaki satırı yazdık.
if myValue = “” then exit sub
Okey butonuna basıldığında ise InputBox içersinde yazdığımız veri myValue nesnesine yazılır. Kodumuzda bu değer ile ilgili bazı sınırlamaları kontrol ettikten sonra değeri Tag_1’e ve TextBox_0’a yazıyoruz. Yazdığımız bu script sayfa açılırken bir kere çalışması yeterlidir. Bunun için Screen Load fonksiyonunu kullanabilirsiniz. Bu fonksiyona scada sayfasında boş bir yere sağ kilik yaparak Screen Properties menüsünden ulaşabilirsiniz.
Imports System
Imports System.IO
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
Namespace WinTr
Public Class MainClass
Public RWTagValue As Object
Public ObjectOfActiveScreen As System.Collections.ArrayList
Public ObjectNameOfActiveScreen As System.Collections.ArrayList
Public Sub Load
dim i as integer = ObjectNameOfActiveScreen.IndexOf(“TextBox_0”)
if i > -1 Then
Dim t as TextBox = ObjectOfActiveScreen(i)
AddHandler t.MouseClick, AddressOf TextBox_0_MouseClick
Else
Msgbox(“TextBox_0 bu sayfada yok!”)
End If
End Sub
Private Sub TextBox_0_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Dim myValue As Object
Tekrar: myValue = InputBox(“TextBox_0 değerini yazınız:” , “TextBox Değer Girme” , sender.Text)
if myValue = “” then exit sub
if isNumeric(myValue) Then
if myValue > 0 and myValue < 100 Then
If MsgBox(“Değer değiştirilecek, Eminmisiniz?” ,MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
sender.Text = myValue
RWTagValue.Value(“Tag_1”) = sender.Text
Else
goto Tekrar
End If
Else
MsgBox(“Girilen değer 0 ile 100 arasında olabilir.”)
Goto Tekrar
End If
End If
End Sub
End Class
End Namespace
Sayfa içerisinde birden çok textbox var ise hepsini benzer şekilde ayarlayabilirsiniz. Bu işlem için iki yöntem kullanılabilir.
1. Her textbox için ayrı Event oluşturmak. Uzun kod yazmanıza sebep olur.
2. Tüm textbox’lar için tek bir event oluşturmak. Daha kısa kod yazarak aynı işlem yapılır.
1. Ayrı Event Oluşturmak:
Load Sub içersinde her iki textbox için handle oluşturmalıyız.
Public Sub Load
dim i as integer = ObjectNameOfActiveScreen.IndexOf(“TextBox_0”)
if i > -1 Then
Dim t as TextBox = ObjectOfActiveScreen(i)
AddHandler t.MouseClick, AddressOf TextBox_0_MouseClick
Else
Msgbox(“TextBox_0 bu sayfada yok!”)
End If
i = ObjectNameOfActiveScreen.IndexOf(“TextBox_1”)
if i > -1 Then
Dim t as TextBox = ObjectOfActiveScreen(i)
AddHandler t.MouseClick, AddressOf TextBox_1_MouseClick
Else
Msgbox(“TextBox_1 bu sayfada yok!”)
End If
End Sub
Daha sonra ilkörneğimizdeki TextBox_0_MouseClick sub’ının aynısını TextBox_1 için oluşturmalıyız.
2.Tüm Event’ları birleştirmek.
Load sub içerisinde tüm textbox’lar tıklandığında aynı sub’a yönlendirmeliyiz.
Public Sub Load
dim i as integer = ObjectNameOfActiveScreen.IndexOf(“TextBox_0”)
if i > -1 Then
Dim t as TextBox = ObjectOfActiveScreen(i)
AddHandler t.MouseClick, AddressOf TextBox_0_MouseClick
Else
Msgbox(“TextBox_0 bu sayfada yok!”)
End If
i = ObjectNameOfActiveScreen.IndexOf(“TextBox_0”)
if i > -1 Then
Dim t as TextBox = ObjectOfActiveScreen(i)
AddHandler t.MouseClick, AddressOf TextBox_0_MouseClick
Else
Msgbox(“TextBox_1 bu sayfada yok!”)
End If
End Sub
Görüldüğü gibi her iki textbox tıklandığında TextBox_0_MouseClick sub’ına gidecektir. Bu Sub içersinde kimin tıkladığını kontrol edip ona göre işlem yapmalıyız. Bu işlem için Slect Case komutunu kullanabiliriz.
Select Case sender.Name
Case “TextBox_0”
Case “TextBox_1”
Case Else
MsgBox(“Nesne Tanımlı Değil!”)
End Select
Bu komut ile tıklamanın hangi nesneden olduğunu anlayıp ona göre hareket etmemiz sağlanacaktır. Bu göre hazırlanan TextBox_0_MouseClick sub’ı aşağıdadır. Bu kodu hazırlarken mümkün olduğu kadar kısaltmaya çalıştık.
Private Sub TextBox_0_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Dim myValue As Object
Dim Message,Title as String
Dim AltLimit,UstLimit as integer
Select Case sender.Name
Case “TextBox_0”
Message = “TextBox_0 değerini yazınız:”
Title = “TextBox Değer Girme”
AltLimit = 0
UstLimit = 100
Case “TextBox_1”
Message = “TextBox_0 değerini yazınız:”
Title = “TextBox Değer Girme”
AltLimit = -10
UstLimit = 1000
Case Else
MsgBox(“Nesne Tanımlı Değil!”)
Exit Sub
End Select
Tekrar: myValue = InputBox(Message , Title , sender.Text)
if myValue = “” then exit sub
if isNumeric(myValue) Then
if myValue > AltLimit and myValue < UstLimit Then If MsgBox("Değer değiştirilecek, Eminmisiniz?" ,MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then sender.Text = myValue Select Case sender.Name Case "TextBox_0" RWTagValue.Value("Tag_1") = sender.Text Case "TextBox_1" RWTagValue.Value("Tag_2") = sender.Text End Select Else goto Tekrar End If Else MsgBox("Girilen değer uygun sınırlar içerisinde değil!") Goto Tekrar End If End If End Sub
Was this answer helpful?
LikeDislikeBenzer şekilde bir çok kod sizde üretebilirsiniz. Şimdi Buton için geliştirdiğim koda bakınız. Bu script’de sayfa açılırken Loading fonksiyonunda bir kere çalışması yeterlidir.
Imports System
Imports System.IO
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
Namespace WinTr
Public Class MainClass
Public RWTagValue As Object
Public ObjectOfActiveScreen As System.Collections.ArrayList
Public ObjectNameOfActiveScreen As System.Collections.ArrayList
Public Sub Load
dim i as integer = ObjectNameOfActiveScreen.IndexOf(“Button_0”)
if i > -1 Then
Dim b as Button = ObjectOfActiveScreen(i)
AddHandler b.MouseDown, AddressOf Button_0_MouseClick
Else
Msgbox(“Button_0 bu sayfada yok!”)
End If
End Sub
Private Sub Button_0_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
If MsgBox(“Butona tıklamak istediğinizden eminmisiniz?” ,MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
RWTagValue.Value(“Tag_1”) = 0
End If
End Sub
End Class
End Namespace
Was this answer helpful?
LikeDislikeAynı örneği CheckBox için yapalım, CheckBox State Buton(Kalıcı) olarak kullanılabilir. Görünümünüz Style özelliği ile buton olarak değiştirebilirsiniz.
CheckBox olduğunda Value özelliği devreye girer. Script içerisinde ise Checked olarak kullanılır. Value özelliği oluşundan dolayı script içerisinde Tag_1’i değiştirmek yerine CheckBox Checked durumunu değiştireceğiz. Tag’ın değerinin değişmesi ise WinTr içersinde otomatik olacaktır.
Imports System
Imports System.IO
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
Namespace WinTr
Public Class MainClass
Public RWTagValue As Object
Public ObjectOfActiveScreen As System.Collections.ArrayList
Public ObjectNameOfActiveScreen As System.Collections.ArrayList
Public Sub Load
dim i as integer = ObjectNameOfActiveScreen.IndexOf(“CheckBox_0”)
if i > -1 Then
Dim c as CheckBox = ObjectOfActiveScreen(i)
AddHandler c.MouseDown, AddressOf CheckBox_0_MouseClick
Else
Msgbox(“Button_0 bu sayfada yok!”)
End If
End Sub
Private Sub CheckBox_0_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
If MsgBox(“Butona tıklamak istediğinizden eminmisiniz?” ,MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
if RWTagValue.Value(“Tag_1”) = 0 Then
sender.Checked = True
Else
sender.Checked = False
End If
End If
End Sub
End Class
End Namespace
Was this answer helpful?
LikeDislikeButonlar Tag değerlerinin set edilmesinin yanısıra diğer işlemler içinde kullanılır. Örneğin; Rapor oluşturmak,script çalıştırmak,ses dosyası yürütmek,sayfa açmak, v.s. Sayfa açmak script içerinde olabillir. Fakat diğer fonksiyonlar script ile çalıştırılamaya bilir. Böyle durumlarda Schedule fonksiyonunu kullanabilirsiniz. Script içersinde bir Tag’ın değerini değiştirip, Schedule fonksiyonunda bu tag’ı trigger olarak kullanarak oluşturduğunuz fonksiyonlar ile tüm fonksiyonları aktif edebilirsiniz.
C# kullanıcıları bu yazıyı mutlaka okumalı: http://www.wintr.com.tr/2015/01/c-ile-nesne-erisimi/
Was this answer helpful?
LikeDislike