|
pretty sure this is the way to do it:
on key press:
if char.isdigit(e.keychar) = false then
if e.keychar = cchar("-") or e.keychar = cchar(".") then
e.handled = false
else
e.handled = true
end if
else
e.handled = false
end if
|
|
|
|
|
You need to make sure only one . or - is entered, and that a - is at the very front of the string.
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
Ah yes an oversight on my part. Thankyou.
|
|
|
|
|
A correction to my previous post:
if char.isdigit(e.keychar) = false then 'check if it's a number if its not do below:
if e.keychar = cchar("-") then ' if its a minus
if me.textbox1.selectionstart = 0 then 'check if the cursor is at the start
if me.textbox1.text.contains("-") = false then 'check if there is one already
e.handled = false 'allow it if its at the start and the only one
else
e.handled = true 'otherwise don't allow it
end if
else
e.handled = true 'if its not at start don't allow it
end if
elseif e.keychar = cchar(".") then ' if its a decimal place
if me.textbox1.text.contains(".") = false then 'check if there is one already
e.handled = false 'allow it if there is not one already
else
e.handled = true 'if there is one already don't allow it
end if
else
e.handled = true 'if its not a number, a minus or a decimal point, don't allow it
end if
end if
|
|
|
|
|
That is still not exact for several reasons:
- you may have different symbols for decimal point (see regional settings);
- you may want to allow a plus sign;
- you may want to allow thousands separators;
- you may want to allow floating-point notation as in -1,234,567e-23
My conclusion is it is not really worthwhile trying to predict the result of TryParse;
except for a sole minus sign, a sole plus sign, and a partially entered floating-point
number, all partially entered valid numbers are valid numbers on their own.
So I suggest you take care of those exceptions, and work with textchanged event only.
BTW: IMO there is no need to set e.handled=false, it is false to start with.
this seems a good place if any to use multiple exits.
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/...
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
yes i agree, in my article and my textbox control i take much of this into consideration except for floating point and i understand the internationalisation requirements but i just gave him what he asked for, nothing more, its up to him if he want it to be more complex...i don't know what his user require.
|
|
|
|
|
An alternate approach would be to let the user enter whatever they wanted and then validate it by attempting to cast it to a decimal value:
Try
Dim i As Decimal = CDec(TextBox1.Text)
TextBox2.Text = i
MsgBox("Ok!")
Catch ex As Exception
MsgBox("Doh!")
End Try
If you are in ASP.NET then you could also use a CompareValidator (Set the operator to DataTypeCheck and the Type to Double). When the textbox loses focus the validator will fire.
=======================================
There are 10 type of people in the world....
those who understand Binary, and those who don't!
=======================================
|
|
|
|
|
hello boss,
Dim con As New SqlConnection("database=deltadatabase;user id=sa;pwd=sa;server=localhost")
con.Open()
Dim cmd As New SqlCommand("select * from tbl_adminlogin", con)
DataGridView1.DataSource = cmd.ExecuteReader,
i am using the above code.
there is no error execution
but not binding the data
is there anything that is missing?
Sonia Gupta
Soniagupta1@yahoo.co.in
Yahoo messengerId-soniagupta1
Love is Friendship and Friendship is Love....
|
|
|
|
|
try this plse
Dim con as new sqlConnection("server=local;database=me;user=sa;pwd=sa;")
dim cmd as new sqlcommand("select * from tbl",con)
dim objds as new dataset
objds=cmd.executenonquery()
datagrid.datasource=objds.table(0)
happy.....
cooollll...
|
|
|
|
|
dataset is necessary in the code
Sonia Gupta
Soniagupta1@yahoo.co.in
Yahoo messengerId-soniagupta1
Love is Friendship and Friendship is Love....
|
|
|
|
|
May be there is no data in table
Please try assigning cmd.ExecuteReafder to a DataReader and binding the DataReader to the grid. I think this may help.
|
|
|
|
|
Hello madam,
Dim con As New SqlConnection("database=deltadatabase;user id=sa;pwd=sa;server=localhost")
con.Open()
Dim cmd As New SqlCommand("select * from tbl_adminlogin", con)
DataGridView1.DataSource = cmd.ExecuteReader,
There is a problem in 4th line of ur code. Because ExecuteReader is need to open always upto the end. And the important thing is reader need to read continusly. but u did only one time ExecuteReader. To upload the value to datgrid the following code is enough...
Dim con As New SqlConnection("database=deltadatabase;user id=sa;pwd=sa;server=localhost")
Dim cmd As New sqldataadapter("select * from tbl_adminlogin", con)
dim dset as new dataset
cmd.fill(dset,"Tbl")
DataGridView1.DataSource =dset.table(0)
Pls reply wat ever u go...............
Senthil S
Software Engineer
|
|
|
|
|
data is there in the table
Sonia Gupta
Soniagupta1@yahoo.co.in
Yahoo messengerId-soniagupta1
Love is Friendship and Friendship is Love....
|
|
|
|
|
Then try assinging it to dataset and then binding
|
|
|
|
|
Is it a WinForms or a ASP.NET application?
In ASP.NET you have to call DataGridView1.DataBind(); after setting the DataSource.
-^-^-^-^-^-
no risk no funk ................... please vote ------>
|
|
|
|
|
can we do gprs connection programaticly by vb.net
@h3aR
|
|
|
|
|
Google for "vb.net gprs".
|
|
|
|
|
I am having problem with dataset update! I am using a DataAcesTier to access data and update the data and presentation tier is used to do all the manipulation!
Presentation Tier uses DataAcessTier to retrieve the data but when i try to update the database with dataset , NOTING HAPPENS! NO ERROR but NO UPDATES too..
Here is how it goes!!!
I have a class with the name AccessData in my DataAccessTier and it have somehow this sort of code
public sdaMajorDataAdapter as new SqlDataAdapter
public strAllDBTables(50) as string
'strAllDBTables Array is inialized with table names with a sub routine
Public Function CreateDataset() As DataSet
Dim dsMajorDataSet As New DataSet
OpenDbConnection()
' some code for dbcommand and dbconnection variables etc
'For loop used to loop through the table names
For iCounter = 0 to strAllDBTables.length(0) - 1
sdaMajorDataAdapter.Fill(dsMajorDataSet, strAllDBTables(iCounter))
Next
'I have populated the dataset with all the DB tables supposedly
CloseDBConnection()
'this DS is returned to the class from where its accessed
return dsMajorDataSet
End Function
======
Similary in the same class i have a Function for DB update
Public Sub UpdateDataSet(ByVal updateDS As DataSet, ByVal strTableName As String)
OpenDbConnection()
dim dsUpdate as new dataset
'dbCommand.Connection = dbConnection
'dbCommand.CommandText = "Select * from " & strTableName
'sdaUpdate.SelectCommand = dbCommand
'sdaMajorDataAdapter.Fill(dsUpdate, strTableName)
'I have tried to use dataadapter to fill a new dataset and then try to update .no gain
sdaMajorDataAdapter.Update(updateDS, strTableName)
'Which DataAdapter is to be used here ... or do i need to add update queries
'with adapter?, if YES , how to add it?
' There is no error here but NO UPDATES too?
CloseDBConnection()
End Sub
========
'i am accessing these functions in Presentation Tier Class with the name AdminControlPanel Class
'here i have a variable
dim dsControlPanel as new dataset
dim dsRead as new AccessData ' an object of AccessData Class
dsControlPanel = dsRead.CreateDataSet()
' than all the manipulation is done here and after that i return the DS to data access class for updation like this
dsRead.UpdateDataSet(dsControlPanel, "Name of the table to be updated")
'No Error but nothing happens?
i guess i am doing something wrong as to which dataAdapter is to be used?
Thanks for your time
|
|
|
|
|
You've told the DataAdapter how to retrieve the columns, well, all of them, from the table, but you never told it how to update the database with changes.
It's much better practice to change your SQL to retrieve the columns to want instead of using the * specifier. This prevent your from making a change to the table schema and breaking your code doing it. In most case, you're end up returning far more data than you actually need, thereby killing your SQL Server performance, and if the dataset is transferred over a network, transferring way too much information and bogging down the network.
How you've written your data layer in not a good idea. You're creating a generic method that returns a DataAdapter, but that DataAdapter doesn't have a clue about what columns it's supposed to
SELECT IdColumn, SomeColumn, SomeOtherColumn FROM TableName
When you create the DataAdpater, you need to tell it how to update the coumns in the tables. To do this, you either have to supply the DataAdapter with the SQL commands for UPDATE, INSERT, and DELETE, or you have to use an SqlCommandBuilder object to do it for you:
Dim conn As New SqlConnection(connectionString)
Dim comm As New SqlCommand("SELECT IdColumn, SomeColumn FROM SomeTable", conn)
Dim da As New SqlDataAdapter(comm)
Dim cb As New SqlCommandBuilder(da)
Dim ds As New DataSet()
da.Fill(ds)
Return ds
Warning: This could be a little off. I wrote it from memory, and I'm half asleep right now...
|
|
|
|
|
I was just trying to get all the data at front end in dataset! Thats why populated it with all the tables!!!
So, I have to populate my dataset with a single table if i intend to use SqlCommandBuilder! I was trying to use it too but even this was not working, probrably becasue of multiple tables in dataset !!!..
Thanks for the advice sir!
|
|
|
|
|
Hello,
I am developing an application that has a menubar. On selecting menu items, I got to open differnet windows (Forms).
This all makes the main program have nothing except the menubar. I want that on clicking any menu item, the respective form comes somewhere on the main window only. On close event of the new form, it gers closed - disappears. So, the new form is inside the main form only. New window is not opened. How do I acheive something like this. If I add a Container in the main window, can I add a form in it. Or Do I have to make the new form as a Panel and add it in some how. If it is a Panel,. then how do I add in the main form. ????
I don't know how do I acheive such a thing in VB.NET. I would appreciate, if anyone can help me out.
Thanks
Terry
|
|
|
|
|
hi,
for each "subform" use a "user control".
In the area where you want the subform to appear add a correctly sized panel.
then you can make your user control's parent the panel and add the usercontrol to the panels controls collection.
when you want to use a different usercontrol just remove the original from the panels control collection and add the new one.
a new user control can be added to a solution by right clicking on the solution in the solution explorer and doing an Add new Item (vs2005)
select a usercontrol and then you will get a screen you can add components to.
when you are done
at the menu button click event you can do something like (VB pseudocode)
dim myUc as UserControl = new UserControl
myUC.parent = parentpanel
parentpanel.controls.add myUc
..
dont forget to remove the old UC fromthe parentpanel collection , otherwise it will still try and display and its z-order may be higher than the new one so it will be "above" it
hope this helps
Martin
life is a bowl of cherries
go on take a byte
|
|
|
|
|
Thanks Martin & TDDragon.
I tried working with both & Both are good solutions. I prefer only 1 control per screen - in that scenario UC is best. I also need to have a Report and a form with Letter templates, RichTextBox to write letter. Will UC be able to handle this? Also will UC be able to manage with DB, as I got to work with DB a lot.
In MDI, can I ahve control over opening N number of forms. Like if same form is opened, I can just bring it to front but if I want to open only 2 forms max at a time. Is it possible.
Please guide me accordingly, so I can finalize which o choose and start working on it at the earliest.
Thanks
Terry
|
|
|
|
|
Hi,
a UC is in effect a form in the designer
just drag and drop what you need.
as far as scope is concerned a textbox in a uc is addressed from outside the UC in this way:
dim myuc as MYUC = new MYUC
myuc.Texbox.Text = "text"
but all controls that go in a form , goes into a uc
martin
life is a bowl of cherries
go on take a byte
|
|
|
|
|
with UC you should be able to do all the things you want (works pretty much the same as form)
to have control over openening number of forms in mdi you can do it like following:
when openen a form (user clicked to open it)
first check if the form already exist
iterate true the mdichildren collection of you're main form and if you find a form of the same type as the one that needs to be opened just put that form on top (property bringtofront or something)
of you want to be able to open max2 forms do the same but use counter. then after you iterated true the forms look at counter
dim counter as integer = 0
for each f as form in frmmain.mdichildren
if f.gettype.equals(gettype(frmsubformthatneedstobeopened)) then
counter =+1
end if
next
if counter <2 then
open new form
else
'do something
end if
hope this helps
|
|
|
|