Você está offline; aguardando reconexão

Como usar um controle ComboBox para editar dados em um controle ListView no Visual translation from VPE for Csharp

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 320344
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 320342.

NESTA TAREFA

Sumário
Este artigo passo a passo demonstra como usar um controle ComboBox para editar os dados em um controle ListView . Este método substituirá a abordagem de caixa de texto padrão de edição dos dados em um controle ListView

back to the top

Descrição da técnica

Usando a propriedade LabelEdit do controle ListView , você pode permitir que o usuário editar o conteúdo do controle ListView . Para editar os dados no controle ListView , você pode usar uma caixa de texto padrão. Ocasionalmente, é útil ter outro controle para editar o controle. Este artigo simula como usar um controle ComboBox para editar os dados em uma ListView quando ListView está no modo de exibição Detalhes.

Quando o usuário seleciona uma linha em ListView , um cálculo é executado para localizar o retângulo delimitador para a primeira coluna da linha que é clicada. Que o cálculo leva em consideração que a coluna pode não estar visível ou pode não ficar totalmente visível quando a linha for clicada e quando ComboBox é dimensionado e exibidos adequadamente.

Além de posicionamento e dimensionamento ComboBox , para esse exemplo também observa para controlam duas mensagens em ListView : WM_VSCROLL e WM_HSCROLL. Essas mensagens ocorrem sempre que o usuário rola o controle ListView verticalmente ou horizontalmente. Como o ComboBox fisicamente não é parte do controle ListView , ComboBox não rola automaticamente com a ListView . Portanto, sempre que ocorrer uma dessas duas mensagens, ComboBox deve estar ocultas. Para procurar essas mensagens, crie uma classe UserControl personalizada que herda da classe ListView . Neste controle personalizado, o método WndProc é substituído para permitir todas as mensagens a ser verificado para rolagem.

back to the top

Criar o controle ListView herdado

  1. Inicie o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
  2. No menu arquivo , aponte para novo e, em seguida, clique em Project .
  3. Na caixa de diálogo New Project , clique em projetos do Visual translation from VPE for Csharp em Tipos de projeto e, em seguida, clique em Windows Control Library em modelos .

    Observação No Visual Studio 2005, clique em translation from VPE for Csharp Visual em Tipos de projeto .
  4. Substituir todo o código na classe UserControl com o seguinte código:
    using System;using System.Collections;using System.ComponentModel;using System.Drawing;using System.Data;using System.Windows.Forms;namespace InheritedListView{   /// <summary>   /// Summary description for UserControl1.   /// </summary>   public class MyListView : System.Windows.Forms.ListView   {      /// <summary>      /// Required designer variable.      /// </summary>      private System.ComponentModel.Container components = null;      public MyListView()      {         // This call is required by the Windows.Forms Form Designer.         InitializeComponent();         // TODO: Add any initialization after the InitForm call      }      /// <summary>      /// Clean up any resources being used.      /// </summary>      protected override void Dispose( bool disposing )      {         if( disposing )         {            if( components != null )               components.Dispose();         }         base.Dispose( disposing );      }      #region Component Designer generated code      /// <summary>      /// Required method for Designer support - do not modify       /// the contents of this method with the code editor.      /// </summary>      private void InitializeComponent()      {         components = new System.ComponentModel.Container();      }      #endregion      private const int WM_HSCROLL = 0x114;      private const int WM_VSCROLL = 0x115;      protected override void WndProc(ref Message msg)      {         // Look for the WM_VSCROLL or the WM_HSCROLL messages.         if ((msg.Msg == WM_VSCROLL) || (msg.Msg == WM_HSCROLL))         {            // Move focus to the ListView to cause ComboBox to lose focus.            this.Focus();           }         // Pass message to default handler.         base.WndProc(ref msg);      }    }}					
    Observação O código deve ser alterado no Visual Studio 2005. Quando você cria um projeto Windows Forms, translation from VPE for Csharp Visual adiciona um formulário para o projeto por padrão. Este formulário é denominado Form1. Os dois arquivos que representam o formulário são denominados Form1.cs e Form1.Designer.cs. Tem de escrever seu código no Form1.cs. O ficheiro Designer.cs é onde o Windows Forms Designer escreve o código que implementa todas as ações que você executou adicionando controles. Para obter mais informações sobre o Windows Forms Designer no Visual translation from VPE for Csharp 2005, visite o seguinte site:
  5. Salve e criar o projeto.
back to the top

Criar o aplicativo de exemplo

  1. Siga estas etapas para criar um novo Windows Application no translation from VPE for Csharp Visual .NET ou no Visual translation from VPE for Csharp 2005:
    1. No menu arquivo , aponte para novo e, em seguida, clique em Project .
    2. Na caixa de diálogo New Project , clique em projetos do Visual translation from VPE for Csharp em Project Types e clique em Windows Application em modelos . Por padrão, é criado o Form1.

      Observação No Visual Studio 2005, clique em translation from VPE for Csharp Visual em Tipos de projeto .
  2. Siga estas etapas para adicionar o controle que você criou na seção Create the Inherited ListView Control para seu aplicativo do Windows:
    1. No menu Ferramentas , clique em Customize Toolbox .
    2. Na guia .NET Framework Components , clique em Procurar .
    3. Na caixa de diálogo Abrir , localize o controle que você criou na seção Create the Inherited ListView Control e em seguida, clique em Abrir . Isso adiciona esse controle à caixa de ferramentas para que você pode usar o controle da mesma forma para qualquer outro controle.
    4. Arraste MyListView da seção Geral da caixa de ferramentas para Form1.
  3. Arraste um controle ComboBox da seção de caixa de ferramentas da Windows Forms para Form1.
  4. Na janela Properties do ComboBox , alterar a propriedade Name para cbListViewCombo e em seguida defina a propriedade Visible como False .
  5. Adicione o seguinte código à classe do Form1 acima o construtor:
    private ListViewItem lvItem;					
  6. Adicione o seguinte código ao evento Load do Form1:
    // Add a few items to the combo box list.this.cbListViewCombo.Items.Add("NC");this.cbListViewCombo.Items.Add("WA");// Set view of ListView to Details.this.myListView1.View = View.Details;// Turn on full row select.this.myListView1.FullRowSelect = true;			// Add data to the ListView.ColumnHeader columnheader;ListViewItem listviewitem;// Create sample ListView data.listviewitem = new ListViewItem("NC");listviewitem.SubItems.Add("North Carolina");this.myListView1.Items.Add(listviewitem);listviewitem = new ListViewItem("WA");listviewitem.SubItems.Add("Washington");this.myListView1.Items.Add(listviewitem);            // Create column headers for the data.columnheader = new ColumnHeader();columnheader.Text = "State Abbr.";this.myListView1.Columns.Add(columnheader);columnheader = new ColumnHeader();columnheader.Text = "State";this.myListView1.Columns.Add(columnheader);// Loop through and size each column header to fit the column header text.foreach (ColumnHeader ch in this.myListView1.Columns){			   ch.Width = -2;}					
  7. Adicione o seguinte código ao evento SelectedValueChanged do ComboBox :
    // Set text of ListView item to match the ComboBox.lvItem.Text = this.cbListViewCombo.Text;		// Hide the ComboBox.this.cbListViewCombo.Visible = false;					
  8. Adicione o seguinte código ao evento Sair do ComboBox :
    // Set text of ListView item to match the ComboBox.lvItem.Text = this.cbListViewCombo.Text;// Hide the ComboBox.this.cbListViewCombo.Visible = false;					
  9. Adicione o seguinte código ao evento KeyPress do ComboBox :
    // Verify that the user presses ESC.switch (e.KeyChar){   case (char)(int)Keys.Escape:   {      // Reset the original text value, and then hide the ComboBox.      this.cbListViewCombo.Text = lvItem.Text;      this.cbListViewCombo.Visible = false;      break;   }   case (char)(int)Keys.Enter:   {		      // Hide the ComboBox.      this.cbListViewCombo.Visible = false;      break;   }}					
  10. Adicione o seguinte código ao evento MouseUp do myListView1 :
    // Get the item on the row that is clicked.lvItem = this.myListView1.GetItemAt(e.X, e.Y);// Make sure that an item is clicked.if (lvItem != null){   // Get the bounds of the item that is clicked.   Rectangle ClickedItem = lvItem.Bounds;   // Verify that the column is completely scrolled off to the left.   if ((ClickedItem.Left + this.myListView1.Columns[0].Width) < 0)   {      // If the cell is out of view to the left, do nothing.      return;   }   // Verify that the column is partially scrolled off to the left.   else if (ClickedItem.Left < 0)   {      // Determine if column extends beyond right side of ListView.      if ((ClickedItem.Left + this.myListView1.Columns[0].Width) > this.myListView1.Width)      {         // Set width of column to match width of ListView.         ClickedItem.Width = this.myListView1.Width;         ClickedItem.X = 0;      }      else      {         // Right side of cell is in view.         ClickedItem.Width = this.myListView1.Columns[0].Width + ClickedItem.Left;         ClickedItem.X = 2;      }					   }   else if (this.myListView1.Columns[0].Width > this.myListView1.Width)   {      ClickedItem.Width = this.myListView1.Width;   }   else   {      ClickedItem.Width = this.myListView1.Columns[0].Width;      ClickedItem.X = 2;   }				   // Adjust the top to account for the location of the ListView.   ClickedItem.Y += this.myListView1.Top;   ClickedItem.X += this.myListView1.Left;					   // Assign calculated bounds to the ComboBox.   this.cbListViewCombo.Bounds = ClickedItem;			   // Set default text for ComboBox to match the item that is clicked.   this.cbListViewCombo.Text = lvItem.Text;   // Display the ComboBox, and make sure that it is on top with focus.   this.cbListViewCombo.Visible = true;   this.cbListViewCombo.BringToFront();   this.cbListViewCombo.Focus();}					
back to the top

Verificar se ele funciona

  1. Salve e execute o exemplo.
  2. Clique em uma linha em ListView . Observe que uma caixa de combinação aparece sobre o local da primeira coluna da linha atual.
  3. Para ocultar a caixa de combinação, clique em um item na caixa de combinação, pressione ESC e, em seguida, percorra o ListView ou clique em outro controle. Observe que o valor que você clicou na caixa de combinação é colocado na primeira coluna da linha clicada de ListView .
back to the top

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 320344 - Última Revisão: 12/11/2006 21:01:27 - Revisão: 2.3

Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# 2005 Express Edition

  • kbmt kbhowtomaster KB320344 KbMtpt
Comentários
d"; document.getElementsByTagName("head")[0].appendChild(m);