2017-02-02 23 views
2

Wenn Sie die Listbox-Elemente im Listenfeld doppelt anklicken, werden die Werte der Listenfeldelemente dem dynamischen Textfeld in der Listbox zugewiesen. (Ich habe eine dynamische Textbox in der Listbox erstellt.) um die Textfeldwerte zu ändern. Nach dem Klicken auf die Eingabetaste werden die Textfeldwerte den Listbox-Elementen hinzugefügt und dann dynamytextbox removed.when klicken Sie auf die esc-Taste, um die Anfangswerte zum Listenfeldelement hinzuzufügen.So rufen Sie eine KeyEventArgs-Methode in WPF

Ich habe ein Problem innerhalb der MouseEventArg-Methode, wie die KeyEventArgs-Methode aufgerufen werden kann.

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); 
      } 
     } 
    } 

Antwort

1

Try this:

Abonnieren Sie Ihre dynamischen Textbox KeyEvent. Setzen Sie das in den Konstruktor. Zum Beispiel:

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; 

} 
+0

Ich möchte einige Werte in das Textfeld bearbeiten. Dies wird getroffen, wenn eine Taste gedrückt wird – user688

+0

@LogeswariJegatheesan ja, aber es wird andere Art von Schlüssel ignorieren, weil es nur für Enter-Taste Filter. Probieren Sie es aus, ohne es zu debuggen, oder debuggen Sie einfach bei: using (DatabaseConnector databaseConnection = new DatabaseConnector (ApplicationConstants.ConnectionString)) –

+1

Vielen Dank ... Es funktioniert. – user688

1

Können Sie nicht nur

System.Windows.Forms.KeyEventArgs ee = new System.Windows.Forms.KeyEventArgs(); 
ee.KeyCode = Keys.Enter; 
EnterClicked(sender,ee);