|
You got a "ding" because the application that actually got the keystrokes, didn't like the key's being used at that time. The problem with SendKeys is that there is no guarantee that the application you "think" you sent them to was the one that actually got them.
|
|
|
|
|
In my App I am trying to use SendKeys.Send("^X") to cut tree nodes from a treeView. My App has focus.
This works in 32-bit Win XP but not on the 64-bit 2008 server machine.
??
rafone
Statistics are like bikini's...
What they reveal is astonishing ...
But what they hide is vital ...
|
|
|
|
|
Rafone wrote: I am trying to use SendKeys.Send("^X") to cut tree nodes from a treeView.
To what end?
|
|
|
|
|
I have been maintaining the app since 2002. This is the way that the code was originally written.
The users have a complete, manageable treeview that is the basis of their user interface.
On the newest machine they have (64-bit 2008 server machine) the cut function is not working in the treeview. I have tracked it down to the sendkeys statement in the code. Same code works on numerous other 32-bit XP and 2000 Pro machines.
I was asking what I thought was a simple question.
Does anyone else using 2008 VS and 64-bit 2008 server have the same problem?
to that end...
rafone
Statistics are like bikini's...
What they reveal is astonishing ...
But what they hide is vital ...
|
|
|
|
|
I have been maintaining the app since 2002. This is the way that the code was originally written.
And this makes the technique you're using perfectly OK ... how?
OK, without knowing what you're using this for, I can only guess. But, why don't you copy the data you need to the clipboard WITHOUT going through the (as you've found out!) unsupportable solution you're using now?
|
|
|
|
|
I have an update code for table written by access 2003 it has 4 coloumns and one of these is id(Automatic numbering)
The problem : when i update the table occurs an error(error in update statment).
The code update is
OleDbCommand com = new OleDbCommand("update attributes set identifier=@identifier , language=@language ,title=@title, description=@description where id=@id ", con);
com.Parameters.Add("@identifier", textBox1.Text);
com.Parameters.Add("@language", (textBox2.Text));
com.Parameters.Add("@title", (textBox3.Text));
com.Parameters.Add("@description", textBox4.Text);
con.Open();
com.ExecuteNonQuery();
con.Close();
|
|
|
|
|
What is the exception? That will tell more about your problem than simply "error in update statement"
only two letters away from being an asset
|
|
|
|
|
Syntax error in UPDATE statement
|
|
|
|
|
That is T-SQL, not what ever varient of SQL that Access uses. Access needs question marks in place of named parameters and the parameters need to be in the same order as the question marks appear in the SQL.
|
|
|
|
|
To add to Colin's post: Also define a parameter for column id and give it a value.
|
|
|
|
|
Somewhere, somehow, a Queue's elements' values are being changed. The thing is, I'm not sure when they're changing. Is there a way to break at the moment a change is happening to an item in the queue?
I'm running this in a single thread, so multi-threading issues are an impossibility.
|
|
|
|
|
What about a conditional breakpoint with the condition set to "Has changed"?
But I'm not sure if it will work for Queue, without random access.
Regards,
Lev
|
|
|
|
|
I thought of that, but I can't guess in advance which item in the queue is getting changed.
|
|
|
|
|
Well, there is a quite awkward way, subclass the queue, add a property that will somehow reflect the inner state of the queue, breakpoint when it changes and checkout the call stack. Maybe it will help.
Regards,
Lev
|
|
|
|
|
Can't you use the "Watch" capability of the debugger?
As I recall, you can set a Watch to break when an expression changes, so just make up an expression that evaluates some member of your Queue, and set it to break when that changes.
|
|
|
|
|
See, the problem is that any item in the queue is being changed and arbitrarily. Its also quite tentative. I've narrowed it down to the method that's causing the change, but I'll be damned if I see what the heck is wrong.
|
|
|
|
|
Perhaps logging might be more helpful in this instance.
Create a log file and write to it every time this method is called.
|
|
|
|
|
That is precisely what I did.
|
|
|
|
|
Well, most likely the items are not changing because they are in the queue, which means that you probably have a reference somewhere to some of the items or some of the members of some items. Check what happens from when you create the items until you put them in the queue, to see if you might keep a reference to something or reusing something that you already have a reference to.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
I changed it to a queue of strings. Solved the problem, but that's just a hack until I can get back to it and get to the bottom of it. But I have no external references, that's what's driving me insane.
|
|
|
|
|
Well, strings are immutable, so that is consistent with my theory.
I'm not talking about external references, I'm talking about references to the objects that you store in the queue.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Hi,
you may want to check what happens to your items after you have put them in the queue too, if
they are reference items the only that gets queued is a pointer, not the actual values...
|
|
|
|
|
how can i simply send data between my main form and a shown user control eg if a usercontrols button is pressed have it send to the main form as if a button was pushed in the main form. or to have a user control edit a string on the main control. seemingly simple stuff but i cannot find any examples.
thanks in advance. Callum
|
|
|
|
|
dustybike wrote: have a user control edit a string on the main control
Child controls should not know about their parent controls. If they do then you can't reuse the control and there would be no point in having it.
A number of possible solutions.
1. Use the observer pattern and have your user control expose an event that the main form handles. Your event is triggered by the button click.
2. Create an interface and have the main form implement it. Pass a reference to the interface (i.e. the form object) to the user control when the form is created. When the button is clicked it can invoke the method on the interface. If you have multiple forms that use the control they will each need to implement the interface.
|
|
|
|
|
The child knowing about the parent is the simplest way though. Make a global variable that points to the parent form, or pass a variable pointing to the parent form into the user control and invoke methods on the parent. There is a point to having user controls in this case, both for code encapsulation/organization, or if the parent needed more than one of these children and each had their own index.
class Form1 : Form
{
public Form1()
{
Form2 form2 = new Form2( this );
}
}
The event way mentioned is a little trickier but not much. Make a public event inside Form2.
public delegate void MyDelegate(object owner, EventArgs args);
public event MyDelegate myEvent;
private void OnEvent(object owner, EventArgs args)
{
object[] argsArray = new object[2];
argsArray[0] = owner;
argsArray[1] = args;
this.BeginInvoke( myEvent, argsArray );
}
Now anyone can subscribe to myEvent and call their own event handler.
Use interfaces if you prefer the abstraction of prgramming to interfaces. Some people consider this the most reusable code.
|
|
|
|