|
Try setting the datasource equal to null.
|
|
|
|
|
where should i make it null ????
|
|
|
|
|
Hello
I have the following piece of code (RSSToolkit). The RSS feed that I try to parse has multiple link elements and each such element has "rel" as attribute but with a different value. I'm interested in the link element with "absolute" as "rel" value.
[XmlElementAttribute("link")]
[XmlAttributeAttribute(AttributeName = "rel")]
public string LinkAlternate
{
get
{
return _link_alternate;
}
set
{
_link_alternate = value;
}
}
Thanks for your time
|
|
|
|
|
Hi. I'm having a problem with focusing from textbox to a button. Is there a way in doing this? I tried coding it but it doesn't work. Here's my code so far:
The textbox:
private void txtBoxLogIn_TextChanged(object sender, EventArgs e)
{
txtBoxLogIn.KeyPress += new KeyPressEventHandler(txtBoxLogIn_KeyPress);
}
and the eventhandler:
private void txtBoxLogIn_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
txtBoxPassword.Focus();
}
else if (e.KeyChar == (char)Keys.Enter && txtBoxPassword.Focused == true)
{
btnProceedLogIn.Focus();
}
}
I'll be using only one eventhandler in transferring focus to other controls.
|
|
|
|
|
Is it a login dialog? and you want btnProceedLogIn to behave as default button?
set the DialogResult property of btnProceedLogIn to OK and then whenever you press Enter, btnProceedLogIn will be activated.
Now, in the code, if the login is successful, and you want to close the form, no need to do anything else.
In case the login is unsuccessful, add a line:
this.DialogResult = DialogResult.None;
This will ensure that form will not be closed.
|
|
|
|
|
Actually to have a button respond to the enter key you need to set the AcceptButton property of the form that the button is on.
|
|
|
|
|
There is a catch. If you only set AcceptButton Property, the Button doesn't change its DialogResult property.
This however is not true for Cancel button in which case, Cancel button dialogresult is changed.
|
|
|
|
|
To have a button respond to a key press, you set the AcceptButton property of the form for enter and the CancelButton property for the esc key the DialogResult property of the buttons has no effect on this what so ever.
The DialogResult property of the buttons is only used to control what is returned as a DialogResult when you use ShowDialog() to display a form.
-- EDIT --
As the OP is trying to move focus from control to control when the enter key is pressed, DialogResult really has no bearing on the OP question.
|
|
|
|
|
gamer1127 wrote: private void txtBoxLogIn_TextChanged(object sender, EventArgs e)
{
txtBoxLogIn.KeyPress += new KeyPressEventHandler(txtBoxLogIn_KeyPress);
}
Why re-subscribe to the event every time the text changes? Shouldn't you only need to subscribe to that once?
gamer1127 wrote: I'll be using only one eventhandler in transferring focus to other controls.
Why? Have you tried separate handlers for each control? That might be the source of the problem.
[EDIT]
Actually, that is the source of the problem. The first if statement in the KeyPress handler doesn't check what control the Enter Key was pressed in. It just sets the focus to the password box regradless of where Enter was pressed.
|
|
|
|
|
Jimmanuel wrote: Why? Have you tried separate handlers for each control?
I just thought of applying the concept of having controls tagged to only one event-handler if they will have the same behavior.
If that is the case, then i'll try using one event-handler for each control.
|
|
|
|
|
But they don't all have the same behaviour, they have similar behaviour. It's not a bad idea, but you have to abstract away all of the things from the handler that are specific for each control. You can actually do this pretty elegantly with one handler by using the Control s Tag property and the sender param of the handler.
The idea is that the Enter key press transfers focus to the next Control , right? That's the similar behaviour the handler should implement but it needs to know which Control to transfer focus to. That's easy with the Tag . In the constructor of your form go through the similar behaving Control s and save a reference to the next Control that gets focus in the Tag :
txtBoxLogIn.Tag = txtBoxPassword;
txtBoxPassword.Tag = btnProceedLogIn;
btnProceedLogIn.Tag = null;
Then your handler simplifies to this:
private void focusForwardingControl_KeyDown(object sender, KeyEventArgs e)
{
Control control = sender as Control;
if (control == null)
{
return;
}
if (e.KeyCode == Keys.Enter)
{
Control nextControl = control.Tag as Control;
if (nextControl != null)
{
nextControl.Focus();
}
}
}
Then both text boxes can use to the same event handler to forward focus to the next Control in the chain.
Note that I'm using the KeyDown handler instead of KeyPress , I like the Event Args better.
Also, all code here was written in the CP post editor so it hasn't been tested or compiled
|
|
|
|
|
Ok. I'll try using this one and see if it works.
|
|
|
|
|
Your right about that. It is indeed the source of the problem. Thanks for that.
|
|
|
|
|
Now I have a new problem. Whenever I click the Log-In button it doesn't show an error message even if there's no entered data or the entered username and passwords are both wrong. It just do the event of logging in if both the username and passwords are correct. The username and password are saved in an MS Access database and i used SELECT query to check if both exists. Here is the code to clearly understand:
string sConnection = "Provider = Microsoft.Jet.OLEDB.4.0;" + "Data Source = Schedule.mdb";
try
{
OleDbConnection dbConnect = new OleDbConnection(sConnection);
dbConnect.Open();
string sqlString = "SELECT * FROM LogIn WHERE ID = '" + txtBoxLogIn.Text + "' AND Password = '" + txtBoxPassword.Text + "';";
OleDbCommand dbCmd = new OleDbCommand();
dbCmd.CommandText = sqlString;
dbCmd.Connection = dbConnect;
OleDbDataReader dbReader;
dbReader = dbCmd.ExecuteReader();
while (dbReader.Read())
{
if (dbReader[0].ToString() == txtBoxLogIn.Text && dbReader[1].ToString() == txtBoxPassword.Text )
{
frmMainForm frmMainForm = new frmMainForm();
frmMainForm.ShowDialog();
this.Close();
}
else
{
MessageBox.Show("Either the Username or Password does not exist", "Log-In Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
}
}
dbReader.Close();
dbConnect.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return;
}
Did I do something wrong?
|
|
|
|
|
There are a couple things wrong:
* This deserves a new post instead of a reply to your original question.
* The reader and connection are not properly disposed of, they should be used in using statements to ensure that even if the Exception handler or this.Close() is called they get cleaned up properly.
* Catching the general Exception is considered bad practice.
* The case where dbReader.Read() returns false isn't handled - if there aren't any matching rows then the inner if - else will be skipped completely *** This is probably the cause of what you're seeing
* SELECT * is also not the best practice, it'd be better if you specify the column names in the SELECT .
* You should use a parameterized query to prevent SQL injection attacks. Here's and example for SqlConnection s: clickety[^], OleDbConnection s are similar
* shouldn't that while be an if ?
* If those column values might be null then they should be checked for DBNull.Value before they're ToString() ed
|
|
|
|
|
With all the things you pointed out, it means that I have to learn a lot of things when it comes to programming with relational database. Have to start reading all the ebooks that i got. We just started discussing programming with database and we already have a project that has it.
|
|
|
|
|
It's all forgivable if you're new .
The really important one in that list is to make sure that the connection to the database is cleaned up properly: see the docs for the OleDbConnection[^] class for a small example of how to protect your connection. For the details about what it's doing read up on the using[^] statement.
|
|
|
|
|
Alright. Thanks for your answers. I think it will really help me a lot.
|
|
|
|
|
Glad to help
|
|
|
|
|
While a lot of folks will get mad at people "having others do their homework for them" you handled this very well. You attempted the code, had some problems and asked an intelligent question. You listened to advice, tried the solution and again did everything correct.
You did your best and this stuff is not easy at all. Don't give up and keep going, with your attitude you can do it.
Threads like these are part of why this place exists.
|
|
|
|
|
If you go to Visual Studio ->Tools -> Options you will see the tree view options on the left side and everey time you click on an item it will display a different options on the right side..
I want to know what's the bset way to do that? is it by different panels for every option (tree item) or by creating Tab contro and disable the headers or you have a better idea?
|
|
|
|
|
Easiest Method that I can think of:
Create different user controls. Whenever an item is selected in treeview, change the usercontrol displayed on the right side.
Save each control in a List<control> so that when "Save" button is clicked, each of these controls can save the info into their respective spaces.
|
|
|
|
|
Hi All, just a note before you start reading, I wanted to apologize in advance for going into so much detail but I wanted to be thorough... if perhaps confusing in places
OK, so whats happening is that I'm having trouble getting data to display when they are passed to a form.
What's meant to happen is that the form NotesWindow (form2) (which is initialized by the main form) is meant to initialize a third form NewNoteWindow (form3) which takes text input from the user and then passes it back to NotesWindow (form2) which is meant to display it in a listbox.
I have managed to, using a constructor pass the data from NewNoteWindow (form3) to NotesWindow (form2) but it will only display if I hide NotesWindow (form2) after getting it to open NewNoteWindow (form3) and then using NotesWindow.Show() from NewNoteWindow (form3) to bring up the form again.
My theory as to why this is happening is that I initialize NewNoteWindow (form3) from NotesWindow (form2) using NewNoteWindow newNoteWindow = new NewNoteWindow and then to pass the data back I need to initialize NotesWindow (form2) in NewNoteWindow (form3) using NotesWindow notesWindow = new NotesWindow I suspect that this is creating a new instance of NoteWindow (form2) and sending the data to that as opposed to the already open NotesWindow (form2).
If I'm right about that, anyone know how to send the data back to NotesWindow (form2) properly, if I'm wrong then anyone know what I'm doing wrong?
I'll include what I believe to be the relevant pieces of code at the bottom, if u want any more of the code or if you need me to clarify anything just ask.
Another problem I have had is that when I go to input a second piece of data the listbox is cleared of its data, I don't know if this is because of the this.hide() and NotesWindow.Show methods or because I'm initializing another instance of NotesWindow (form2) (I believe it's this reason) or something completely different.
Thanks in advance for any insight you can offer about my problem.
Relevant Code In NotesWindow (Form2)
NewNoteWindow newNoteWindow = new NewNoteWindow();
public string NewNote1
{
set
{
notesDisplayBox.Items.Add(value);
label1.Text = value;
}
}
private void addNewButton_Click(object sender, EventArgs e)
{
newNoteWindow.ShowDialog();
}
Relevant Code in NewNoteWindow (Form3)
public string NewNoteTextBox
{
get
{
return newNoteTextBox.Text;
}
}
private void okButton_Click(object sender, EventArgs e)
{
NotesWindow notesWindow = new NotesWindow(); <--- I initialize this here because if I do it
notesWindow.NewNote1 = NewNoteTextBox;
notesWindow.label1.Text = newNoteTextBox.Text;
this.Close();
}
Sorry again for making you read through all that, but I did want to be thorough.
Peace
|
|
|
|
|
your question is very very confusing. Could you please confirm this in a synopsis first?
What I gather is that
You open
form2 from form1.
form3 from form2
you want to pass data between forms.
there are a few methods to do this. these are:
1. when you open a form, you can pass parameters.
2. when you close the form, you can use properties to receive values from the closed forms.
3. if you want to pass the data while they are open, one of the most convenient methods is to have a static class, pass the values there. And add a eventhandler for every form when they come to focus.
4. write your own events and let the forms call events in other forms. Though this could be tricky with dialog mode forms. If you use Show(), it will work well.
Now, if you tell your problem in basic format, it would be easier to understand, your paragraph is really confusing to me atleast. may be others can understand better.
|
|
|
|
|
Yep that's right
from what you said there, I would need to use properties to pass data from form3 to form2 and use
parameters to pass date from form2 to form3.
The hierarchy of this is
form1 opens form2
form2 opens form3
form3 takes data from the user, then opens an instance of form2 and uses a constructor to pass the data back to form2 (I believe the problem lies here, thinking about whats happening, I believe this part is opening an instance of form2 that is not the instance that opened form3.
That is form2 opens form3, form3 opens form2a (as opposed to form2) if this makes any sense
Reading over what you posted, I believe the solution would be to use properties to receive the data when I close form3, what do you think?
|
|
|
|