Reputation: 361
Inside the listbox,if double click the listbox items, the values of the listbox items assign to the dynamic textbox within the listbox.(I created a dynamictextbox withint the listbox).Then I need to modify the textbox values.After that click enter key, the textbox values Added to the listbox items then dynamictextbox removed.when click the esc key the initial values added to listbox item.
I have problem in inside the MouseEventArg method how can call the keyeventArgs method.
C#
System.Windows.Controls.TextBox dynamicTextBox = new System.Windows.Controls.TextBox();
string previousvalue;
private void items_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
//Get the index value
var index = lstbxindex.Items.IndexOf(lstbxindex.SelectedItem);
//set the textbox height and width property
dynamicTextBox.Width = 230;
dynamicTextBox.Height = 50;
//Add a textbox to the listbox
this.lstbxindex.Items.Add(dynamicTextBox);
//To assign the selectedITem values to textbox
dynamicTextBox.Text = lstbxindex.SelectedItem.ToString();
//Get the textbox values before editing
previousvalue = dynamicTextBox.Text;
//Remove the values from the listbox item
lstbxindex.Items.RemoveAt(index);
dynamicTextBox.AcceptsReturn = true;
}
private void checkenterclicked(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
EnterClicked(sender, e);
//dynamicTextBox.PreviewKeyDown += EnterClicked;
}
}
private void EnterClicked(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
using (DatabaseConnector databaseConnection = new DatabaseConnector(ApplicationConstants.ConnectionString))
using (ProjectsTable projectsTable = new ProjectsTable(databaseConnection))
{
//Here Filter the Name from project Table which DbActive state is zero
projectsTable.AddFilter(new Filter<ProjectsColumnTypes>(ProjectsColumnTypes.DbActive, CompareOperator.Equals, true));
projectsTable.Read();
projectsTable.AddFilter(new Filter<ProjectsColumnTypes>(ProjectsColumnTypes.Name, CompareOperator.Equals, dynamicTextBox.Text));
projectsTable.Read();
foreach (DtoProjectsRow row in projectsTable.Rows)
{
//Guid DbId = row.DbId;
Guid DbId = row.DbId;
var UpdateRow = projectsTable.NewRow();
UpdateRow.Name = dynamicTextBox.Text;
UpdateRow.DbId = DbId;
UpdateRow.DbActive = true;
// Alter the row to the table.
projectsTable.AlterRow(UpdateRow);
// Write the new row to the database.
projectsTable.Post();
//Add the items in comboBox
lstbxindex.Items.Add(dynamicTextBox.Text);
}
// dynamicTextBox = e.Source as System.Windows.Controls.TextBox;
}
}
else
{
if (e.KeyCode == Keys.Escape)
{
lstbxindex.Items.Add(previousvalue);
lstbxindex.Items.Remove(dynamicTextBox);
}
}
}
Upvotes: 3
Views: 1366
Reputation: 61
Try this :
Subscribe to your dynamic textbox keyevent. Put that in the constructor. For example :
System.Windows.Controls.TextBox dynamicTextBox = new System.Windows.Controls.TextBox();
string previousvalue;
public MainWindows()
{
InitializeComponent();
//subscribe to previewKeyDown, KeyDown will not work for enter key
dynamicTextBox.PreviewKeyDown += dynamicTextBox_KeyDown;
}
// this will hit if any key is pressed
void dynamicTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
using (DatabaseConnector databaseConnection = new DatabaseConnector(ApplicationConstants.ConnectionString))
using (ProjectsTable projectsTable = new ProjectsTable(databaseConnection))
{
//Here Filter the Name from project Table which DbActive state is zero
projectsTable.AddFilter(new Filter<ProjectsColumnTypes>(ProjectsColumnTypes.DbActive, CompareOperator.Equals, true));
projectsTable.Read();
projectsTable.AddFilter(new Filter<ProjectsColumnTypes>(ProjectsColumnTypes.Name, CompareOperator.Equals, dynamicTextBox.Text));
projectsTable.Read();
foreach (DtoProjectsRow row in projectsTable.Rows)
{
//Guid DbId = row.DbId;
Guid DbId = row.DbId;
var UpdateRow = projectsTable.NewRow();
UpdateRow.Name = dynamicTextBox.Text;
UpdateRow.DbId = DbId;
UpdateRow.DbActive = true;
// Alter the row to the table.
projectsTable.AlterRow(UpdateRow);
// Write the new row to the database.
projectsTable.Post();
//Add the items in comboBox
lstbxindex.Items.Add(dynamicTextBox.Text);
}
// dynamicTextBox = e.Source as System.Windows.Controls.TextBox;
}
}
private void items_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
//Get the index value
var index = lstbxindex.Items.IndexOf(lstbxindex.SelectedItem);
//set the textbox height and width property
dynamicTextBox.Width = 230;
dynamicTextBox.Height = 50;
//Add a textbox to the listbox
this.lstbxindex.Items.Add(dynamicTextBox);
//To assign the selectedITem values to textbox
dynamicTextBox.Text = lstbxindex.SelectedItem.ToString();
//Get the textbox values before editing
previousvalue = dynamicTextBox.Text;
//Remove the values from the listbox item
lstbxindex.Items.RemoveAt(index);
dynamicTextBox.AcceptsReturn = true;
}
Upvotes: 2
Reputation: 17858
Can you not just do
System.Windows.Forms.KeyEventArgs ee = new System.Windows.Forms.KeyEventArgs();
ee.KeyCode = Keys.Enter;
EnterClicked(sender,ee);
Upvotes: 1