|
|
I'm sure this is obvious.
I want to call FormB from FormA
FormB has a button event
I want to return the outcome of that button event to FormA when it occurs
I can create a public variable on FormA and have the FormB event update it, but this seems awkward and I think breaks encapsulation principles.
Isn't there a better way?
tia
|
|
|
|
|
Yes, create a delegate between the two forms, so that FormB sends a message to FormA when the update occurs. Create a custom eventArgs, which contains the data you want to send.
Christian Graus - C++ MVP
'Why don't we jump on a fad that hasn't already been widely discredited ?' - Dilbert
|
|
|
|
|
OK, thanks but I think I need to be more specific:
..and sorry to be dense here.
I’m in a sub and I want to get input from the user before continuing.
Normally I’d use Dim choice = messagebox.show () to get a response and then continue
But I’d like to have more complex messagebox (another whole form)
How can I best stop further processing until a button is checked on that form?
Do I need to loop until an event occurs on the other form?
|
|
|
|
|
Oh, OK. In that case, you should indeed have a read only property, to check the response. Assuming that a DialogResult is not enough.
Christian Graus - C++ MVP
'Why don't we jump on a fad that hasn't already been widely discredited ?' - Dilbert
|
|
|
|
|
A form can easily be turned into a dialog. Think of the OpenFileDialog or the SaveFileDialog if you've ever used them. You can call the ShowDialog method which will load the form and wait for it to exit before your code continues. An explanation will be much easier with some sample code. Here is the code for our simple dialog.
'A simple dialog form.
'You'll need two buttons and a textbox
Public Class Form2
'Expose text the user entered
Public ReadOnly Property TextFromUser() As String
Get
Return TextBox1.Text
End Get
End Property
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Set the DialogResult to Cancel
Me.DialogResult = Windows.Forms.DialogResult.Cancel
Me.Close
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'Set the DialogResult to OK
Me.DialogResult = Windows.Forms.DialogResult.OK
Me.Close
End Sub
Public Sub New()
' This call is required by the Windows Form Designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Button1.Text = "Cancel"
Button2.Text = "Ok"
End Sub
End Class Example of how you might use it.
'Requires a button
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim frm As New Form2
If frm.ShowDialog() = Windows.Forms.DialogResult.OK Then
MsgBox(frm.TextFromUser)
End If
End Sub
End Class
|
|
|
|
|
THanks everyone... I didn't realize that dialogresult and showdialog were so powerful!
|
|
|
|
|
I can see now that you can return the button presses using dialogresult() and showdialog(). But what's the best way to return other non-button values from a shown dialog?
tia
|
|
|
|
|
You mean you want frm.ShowDialog to return something other then then standard values of "OK", "Cancel" etc.? I don't think you can or need to do that. Just create public properties to expose the value's you want. The example I gave you demonstrated that and I believe that's the proper way to do it. Unless I'm not understanding your needs correctly.
|
|
|
|
|
oh, right... gotit. thanks again
|
|
|
|
|
Let me start out by explaining the situation. I have a DataGridView that I am using to read/write to/from a SQL database. The problem I am running into involves the state of each row. When the records are submitted, I need to be able to tell if the row is a new row or not. There is not a PK for the table so I am having trouble figuring this out. I noticed the DataGridView has a 'State' method but it isn't what i'm looking for. I know the DataGrid used to just have a DataRow.RowState, but I am stuck trying to find a counterpart in the DataGridView.
Thanks In Advance.
Nathan Lindley
|
|
|
|
|
Hi,
I haveadded a database using the wizard in vb express 2005, now I am able to add, delete, jump to records etc as a standard, however when I close my application then open itagain, the new data previously entered is lost.
I believe this has something to do with my altering the dataset and not the actual database, All i need i think is to click on the save button, which will then save the new data entered into the database, how do I do this?
Could anyone help, or guide me to a good tutorial where i could potentially pick up code?
Thanks in advance
Jaidev
|
|
|
|
|
All you have to do is call the .Update() method on your data adapter. An example would be something like:
Private Sub SaveButton_Click(blah, blah) Handles SaveButton.Click
myDataAdapt.AcceptChangesDuringUpdate = True
myDataAdapt.Update()
End Sub
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Hi,
Thanks for your reply,
the AcceptChangesDuringUpdate method doesnt seem to exist. also the "myDataAdapt" I'm imagining i'd have to declare this first as a new data adpater?
do i require a data set?
Also do i need to do work anywere apart from onthe save button? the database is quiet simple, ive used the wizard to call adatabase from the computer. it's an Access Database, therefore i am not using SQL.
Thanks
|
|
|
|
|
OK. I would suggest picking up a book on VB.NET and/or ADO.NET. Using the wizards for all of your data access just makes your code impossible to support since YOU don't know where the designer put any of the code that you need to change to get it to do what you want. Just about noone who does this for a living uses the wizards because they cranks out code that just needs to be completely overhauled anyway.
jady84 wrote: the AcceptChangesDuringUpdate method doesnt seem to exist
This means that you're using the .NET Framework 1.x and VB.NET 2002/2003. That property doesn't exist in .NET 1.x.
jady84 wrote: also the "myDataAdapt" I'm imagining i'd have to declare this first as a new data adpater?
No. You use the existing DataAdapter that was created in your code to load the data from the database. Where is that? I have no idea. The wizard put the code somewhere, I just can't tell you where.
jady84 wrote: do i require a data set?
You already have one. The DataGrid is showing you the data that's in it. This is where all the changes to the data are going. The problem is you have to call the Update method on the DataAdapter that filled the DataSet object.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Hi
I want that when my program begins, the form1 which loads onto the screen opens in maximized, therefore the three icons on the top right hand corner should only have close, minimize and restore down.
I'm assuming this should be an easy task, how do I do it?
Thanks in advance
Jaidev
|
|
|
|
|
Set the windowstate of the form to maximized when the form is loading.
Like:
Private Sub MainForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
me.WindowState = FormWindowState.Maximized
End Sub
The rest takes care of itself.
Mike Lasseter
|
|
|
|
|
thnx
Ahmed El-Badry
|
|
|
|
|
each one of those are a property which you can access in either code or the property window.
windowstate - minmize/normal/maximize
minimizebox - whether the form can be minimized
maximizebox - whehter the form cna be maximized
|
|
|
|
|
vb.net
i posted this one already some time ago, but with no success.
when altering a table i use the sql-string
<br />
ALTER TABLE MyTable ADD columnname FLOAT<br />
but my columnname consists of two words ( firstname, familyname).
so i use this command:
<br />
Cmd1.CommandText="ALTER TABLE MyTable ADD 'max powers' FLOAT"<br />
but now the name appears like this in the new column header: 'max powers'
how can i create the new column without '-character?
|
|
|
|
|
Although supported, you shouldn't be giving columns names with spaces in them. If you want the name to show up in the header change the header text in your UI, not in the SQL table.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Apostrophes are not used to specify a name in a query. You use something like brackets [] or grave accents ``, depending on what database you are using.
You failed to mention what database you are using...
---
Year happy = new Year(2007);
|
|
|
|
|
sorry, i am trying to insert a new column to an excel table. i know, that i shouldn't use names with space in them, but in this case it is necessary. i need to insert firstname and family name to the table, cause i want to export results of a workink time analysis to this table to allow the user to do further processing with those dates. i also tried to use automation to export data to excel, but with no success.
|
|
|
|
|
Access uses brackets to specify a name, so my guess is that Excel does to. Try this:
ALTER TABLE MyTable ADD [max powers] FLOAT
---
Year happy = new Year(2007);
|
|
|
|
|
ok, thanks very much, i will try.
|
|
|
|