|
Did you look at GraphicsPath.IsVisible() ?
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
|
|
|
|
|
What I am trying to do is imitate what I did for a web datagrid. The "Edit"/"Add" row had drop downs that would be populated so that the user could change a selection. What I would like is to somehow reproduce this in a Windows App so that I only have DataGridViewTextBoxColumns when the user is viewing the grid but once the user chooses to edit a row or add a row THEN I can replace the TextBoxColumns with ComboBoxColumns and fill them appropriately.
Is this possible without writing a custom DataGridView control? My drop downs are dependent upon the last chosen combobox selection.
CleaKO
"Now, a man would have opened both gates, driven through and not bothered to close either gate." - Marc Clifton (The Lounge)
|
|
|
|
|
Hi,
this is my code:
Try
Dim DbTest As SqlClient.SqlConnection
DbTest = New System.Data.SqlClient.SqlConnection("Data Source=(local)\SQL;Initial Catalog=testiranje123;Trusted_Connection=yes;Integrated Security=True;Asynchronous Processing=true")
DbTest.Open()
DbTest.Close()
Catch ex As SqlException
MsgBox("idemo dalje")
Catch ex As DataException
MsgBox("idemo dalje")
Catch ex As Exception
MsgBox("idemo dalje")
End Try
the connection string is wrong, i did this on purpose. So i can catch the exception and handle it and build a connection string change mechanism...
the exception is:
SqlException:
Cannot open database "testiranje123" requested by the login. The login failed.
Login failed for user 'test\test'.
There is no way I could catch the exception. I tried all kinds of catch exception handlers but no luck the exception just keeps showing up.
Please, if anybody knows the answer, it is urgent.
Thank you very much!
|
|
|
|
|
You mean that when you run that code the msgbox never appears? instead it stops at DbTest.Open with an exception?
|
|
|
|
|
Yes, that is what I mean, Thank you.
I can not catch the exception it keeps showing up. But i want to catch it and handle it. The msgbox is just a test to see if it can catch it. But the msgbox never shows up.
Please, if you know the answer share it with me!
Thank you.
|
|
|
|
|
Hi,
I have had to make a custom web browser. Now I need to load existing IE toolbars such as Google Toolbar. Could anyone guide me as to how to do it?
Thanks,
Ahmad
|
|
|
|
|
Hello,
I have a Parent Form and a Child form. In Child form, I perform some search and store the data in Dataset. I want to pass that Dataset in the parent form.
This is the way i have coded
' Parent Form<br />
Private Sub ShowSrch()<br />
srchDt = New SearchForm(mainCon)<br />
srchDt.TopLevel = False<br />
srchDt.Parent = Me<br />
srchDt.SetBounds(0, 30, srchDt.Width(), srchDt.Height())<br />
srchDt.Show()<br />
End Sub<br />
Public Sub SetSearchedDs(ByVal sds As DataSet)<br />
Me.searchedDs = sds<br />
End Sub
In child, I tried Me.Parent. but couldn't find SetSearchedDS(). How do i set this, can anone assist me. Any help is appreciated.
Thanks
Terry
|
|
|
|
|
The "Parent" property just returns a "Form". You have to tell the compiler that you're expecting this object to be an instance of your parent form class.
(Me.Parent As MyParentForm).SetSearchedDs(...)
A better way to do this would be with events. Put this in the child form:
Public Delegate Sub DataSetChangedHandler(ByVal sender as Object, ByVal sds As DataSet)
Public Event DataSetChanged As DataSetChangedHandler
Now instead of calling Me.Parent.SetSearchedDs(sds), you would say:
RaiseEvent DataSetChanged(Me, sds)
Now when you create the search form, you can just say:
AddHandler srchDt.DataSetChanged, AddressOf SetSearchedDs
Now instead of the child form referencing the parent directly, it raises an event which the parent subscribes to, and the parent responds to that event by settings its dataset.
|
|
|
|
|
Thanks Ian, I wrote ur code, but it doesn't work. Can you please tell me, where am I going wrong :
In Parent Form
Public Sub SetSearchedDs(ByVal sender As Object, ByVal sds As DataSet)<br />
Me.searchedDs = sds<br />
MessageBox.Show("Search DS updated")<br />
End Sub<br />
Private Sub ShowSrch()<br />
srchDt = New SearchForm(mainCon)<br />
srchDt.TopLevel = False<br />
srchDt.Parent = Me<br />
AddHandler srchDt.DataSetChanged, AddressOf SetSearchedDs<br />
srchDt.SetBounds(0, 30, srchDt.Width(), srchDt.Height())<br />
srchDt.Show()<br />
End Sub
And in Child Form
' Added these 2 lines along with declarations of otehr vars<br />
Public Delegate Sub DataSetChangedHandler(ByVal sender As Object, ByVal searchDs As DataSet)<br />
Public Event DataSetChanged As DataSetChangedHandler<br />
..... In a method <br />
<br />
' SET DATASET IN THE PARENT<br />
'(Me.Parent as MainForm).SetSearchedDs(searchDs)<br />
RaiseEvent DataSetChanged(Me, searchDs)
Can please assist me. And also
(Me.Parent as MainForm).SetSearchedDs(searchDs)
is showing Compile Syntax error at (
The code doesn't show Search DS updated message box. Additionally, after working with Search Form, I open another for mwher I have set the dataset at the Searched dataset avbl in the Main Form & given a Msgbox over there alos. But none of them work. ????
Thanks
Terry
|
|
|
|
|
Ok, I'm having a bit of trouble understanding what you're saying here...
Try setting some breakpoints, and see where the code is going. Put a breakpoint on the RaiseEvent statement (If it doesn't get to there, you've done something wrong in your code)... From there, it should jump straight to the SetSearchedDs routine. If not, set a breakpoint at the AddHandler and make sure it's hitting that.
And if you're using an On Error Resume Next (*shudder*), shut it off, or you'll never find the problem
Oh, and you're mixing the two ideas... Either use (Me.Parent as MainForm) method OR the RaiseEvent... The event is more standard.
|
|
|
|
|
Thanks Ian,
I wasn't using OnError (I love Error Handling) not using both Me.Parent & RaiseEvent, but was trying to see which is working & how. While working with Raise.. Me.parent was commented. BUT the problem was a third thing only.
I had copied my full folder to another comp & was working on it. The paths incliding the drives for both pcs r different. That was not making the files avbl to the compiler. I added breakpoints, & got msg (while debugging) that the file location is changed from original version. I selected Location->Allow......, but that still didn't worked) Can you please tell me how to work out in this scenario with 2 diff. pcs. I work on 1 pcs, then copy the folder to other pc & start working there. But ddue to path differnce it is not working as expected. Today morning when i tried the saem thing straight away with Events, it worked as expected in the first try.
What sh i do to make it work on both pcs or how sh i copy it or set some properties etc. I am totally unaware for this kind of solution. Kindly help me.
Thanks
Terry
|
|
|
|
|
Well, that's a different problem... You've got paths hardcoded somewhere, and without knowing more about your project, I can't really offer any advice.
|
|
|
|
|
Can anybody guide me how to change textbox/combobox border color on GotFocus event.
Many thanks
Nas
|
|
|
|
|
The TextBox doesn't expose any functionality for changing its border colors. You'd have to implement your own version of the TextBox, inheriting from the current TextBox class, and override the painting code and replace it with your own. You'd also have to supply new properties to allow you to specify the border color you want.
|
|
|
|
|
Many thanks Dave.
Regards
|
|
|
|
|
Here is what I am trying to do:
1) Select some text let's say in App 1.
2) Switch to App 2, but as the switch occurs, copy the selected text from App 1 to the clipboard without the user pressing Ctrl-C.
3) Modify the text in the clip board, which I already know how to do.
4) Switch back to App 1 and automatically paste the modified text where the selected text is without the user pressing Ctrl-V.
Any ideas would be appreciated.
Thanks,
Joe C.
joe c
|
|
|
|
|
programmerwantabe wrote: 1) Select some text let's say in App 1.
2) Switch to App 2, but as the switch occurs, copy the selected text from App 1 to the clipboard without the user pressing Ctrl-C.
Are you writing this "App 1"? If not, you'll find this to be a very difficult thing to do. When you switch apps, it's too late to tell the previous app to copy it's text to the clipboard. There is also no API function to tell you which window HAD the focus when your app gets the focus. So, you have to write some hook code to track which window has the current focus, all the time. When your app finally gets the focus, you have to look at this value to get the handle of the window that HAD the focus. Then you can use that to tell the previous window to copy it's contents to the clipboard.
|
|
|
|
|
Hello David
Thank you for your reply. I agree with you, especially since I didn't write App 1 this would be a difficult task to accomplish.
Regards,
Joe C.
joe c
|
|
|
|
|
I am getting this error when I run my program. My program fills a datagrid on using a timer to fill it every so many seconds. That works fine. I have a System watcher program that watches for changes in a database. At that time I want the same datagrid filled again. I have put the fill into a method:
Me.TransactionTableTableAdapter.Fill(Me.MyTestDataSet.TransactionTable)
Me.newDataGrid.Refresh()
When the watcher method calls the fill method it gives me the error Cross-thread operation not valid: Control 'newDataGrid' accessed from a thread other than the thread it was created on.
I researched Google and didn't find anything helpful. Does anyone know a better way of doing it?
|
|
|
|
|
Hi Cory,
this gets covered here and everywhere at least once a week.
As usual, it suffices to search for part of your message, say
"accessed from a thread other than the thread it was created on"
(so DONT include the specific "'newDataGrid" since that's your naming).
Microsoft gives a good "SetText" example.
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
|
|
|
|
|
OK.. I read up on this and am still having trouble. There are some things I am unclear on.
I create a Delegate class variable
Delegate Sub callDel()
My program calls
Private Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)
I create an instance
Dim del As callDel
Then
del = New callDel(AddressOf UpdateGrid)
I can't call UpdateGrid()
so I try
del.Invoke()
It doesn't work. UpdateGrid is suppose to fill my datagrid and doesn't.
What am I doing wrong? Again, my timerclock calls the same Updategrid method and works.
|
|
|
|
|
Hi Cory,
please show the complete method that contains the Invoke and InvokeRequired stuff,
plus some more if necessary. I can't figure it out from 5 separate lines you know.
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
|
|
|
|
|
This is where I want to call the method that updates the grid.
<code> Private Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)
If firstTruck = True Then
updateTimer.Stop()
del = New callDel(AddressOf UpdateGrid)
del.Invoke()
del = New callDel(AddressOf UpdateList)
del.Invoke()
updateTimer.Start()
firstTruck = False
End If
</code>
This is the method that updates correctly in my timer but not in the OnChanged event.
Public Sub UpdateGrid()
If display = "All Trucks" Then
Me.TransactionTableTableAdapter.Fill(Me.MyTestDataSet.TransactionTable)
Else
Me.TransactionTableTableAdapter.FillBy(Me.MyTestDataSet.TransactionTable)
End If
' Me.newDataGrid.Refresh()
End Sub
|
|
|
|
|
Hi,
a thread is not allowed to touch a Control it did not create.
Since normally all controls are in some relation to each other, and the
first Control (your main form) is created by the first, main or "GUI" thread,
only the GUI thread can access each and every one of your controls.
Additional threads are not allowed to touch existing controls, hence they
must use InvokeRequired and Invoke, as in all the examples.
This method is part of a form class, so Me is a Form (hence a Control):
Private Sub SetText(ByVal [text] As String)
' InvokeRequired required compares the thread ID of the
' calling thread to the thread ID of the creating thread.
' If these threads are different, it returns true.
If Me.textBox1.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetText)
Me.Invoke(d, New Object() {[text]})
Else
Me.textBox1.Text = [text]
End If
End Sub
The Invoke applies to the control that needs being accessed, NOT to
some delegate. How would the delegate know where to send the message ?
Only the Control knows its creator, and whether Invoke is Required.
Study the examples !
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
|
|
|
|
|
It is working thank you.
-- modified at 10:33 Thursday 30th August, 2007
|
|
|
|