Passar valor de uma ListView de um form para outro form

Olá,estou tendo dificuldades para passar valores do form1 para o form2 .

A ideia é;

Eu crio um botão chamado : Criar Array:
Ao clicar nele,ele joga uma sequência de némeros no componente listView

private void btnCriarArray_Click(object sender, EventArgs e)
{

        for (int i = 0; i < int.Parse(textBoxTamanhoArray.Text); i++)
        {
            numGerado = numAleatorio.Next();
            listViewCriarArray.Items.Add(numGerado.ToString());
            
        }

    }

Form 2

Quero pegar o valor que foi jogado na listView
e exibir no form2

por exemplo

//Array Criado: 2,5,8,9,4,10,12,15

Já tentei alterara o Construtor da classe Form 2, e mesmo assim não da certo.
Já tentei mexer no form load também e não vai

Cria uma propriedade no outro form pra setar os itens. Exemplo:

Chamando Form2 no Form1 em um evento qualquer:

    var form2 = new Form2();
    form2.Items = listViewForm1.Items;
    form2.ShowDialog();

Criando property no Form2:

    public ListView.ListViewItemCollection Items
    {
        set
        {
            foreach (ListViewItem item in value)
            {
                listViewForm2.Items.Add((ListViewItem)item.Clone());
            }
        }
    }
1 curtida

Funcionou perfeitamente,Mt obrigado.

Você sabe com posso jogar esse valor da ListView em um vetor de inteiros?

ou posso usar essa list view mesmo para ordenar os numeros em ordem crescente?

eu estava querendo ordenar por exemplo [8,1,3,9] usando bubble sort // esse seria o valor da list view

ai eu jogaria esse valor para um vetor e depois criava os for pra ordenar…

ou se acha melhor eu aproveitar a listView?

to quebrando a cabeça aqui

o list view pegou todos os valores…

agora preciso aprender ou a jogar a listView em um vetor ai já consigo me virar de boa

ou usar a list view como um vetor para ordenar

É possível, mas o ideal seria fazer inverso, onde o componente visual ListView não vai se a fonte de dados.

Exemplo Form1:

public partial class Form1 : Form
{
    private IList<int> FonteDados { get; set; }
    private int[] VetorOrdenado { get { return FonteDados.OrderBy(f => f).ToArray(); } }

    public Form1()
    {
        FonteDados = new List<int>();
        InitializeComponent();
    }

    private void btnAdicionar_Click(object sender, EventArgs e)
    {
        AdicionarDados();
        AtualizarListView();
    }

    private void AdicionarDados()
    {
        var numAleatorio = new Random();
        int numGerado;

        for (var i = 0; i < int.Parse(textBoxTamanhoArray.Text); i++)
        {
            numGerado = numAleatorio.Next(1, 9999);
            FonteDados.Add(numGerado);
        }
    }

    private void AtualizarListView()
    {
        listViewCriarArray.Clear();

        foreach (var item in VetorOrdenado)
        {
            listViewCriarArray.Items.Add(item.ToString());
        }
    }

    private void btnChamarForm2_Click(object sender, EventArgs e)
    {
        ChamarForm2();
    }

    private void ChamarForm2()
    {
        var form2 = new Form2();
        form2.Itens = VetorOrdenado;
        form2.ShowDialog();
    }
}

Form2:

public partial class Form2 : Form
{
    public int[] Itens
    {
        set
        {
            listViewForm2.Clear();

            foreach (var numero in value)
            {
                listViewForm2.Items.Add(numero.ToString());
            }
        }
    }

    public Form2()
    {
        InitializeComponent();
    }
}
1 curtida

@javaflex Muito obrigado pela atenção e pelo tempo pra me orientar,tem ajudado muito,to aprendendo a manipular novos metodos e classes por causa desses códigos.

Eu percebi que vc jogou os numeros aleatótorios na fonte de dados que é uma lista.

Eu consigo usar ela pra aplicar meus metódos de ordenação?

o jeito que vc fez ta muito top,porém eu preciso apenas pegar a lista de numeros gerados que vc usou

e aproveitar elas pra implementar meus códigos…

por exemplo

eu preciso comparar o desempenho entre 3 metodos de ordenação

bubble sorte

insert sort

select sort

ai eu crio um metodo pra reaproveitar a lista de numeros aleatorios que vc gerou como parametro

e por fim ordenar

por exemplo

   public void BubbleSort (int [] vetor) // sua ArrayListAqui{

        for (int i = 0; i < vetor.Length; i++)
        {
            for (int j = 0; j < vetor.Length; j++)
            {
                if (vetor[i] > vetor[j])
                {
                    aux = vetor[i];
                    vetor[i] = vetor[j];
                    vetor[j] = aux;
                }
            }
        }

// ai Eu me viro pra criar os metodos e reaproveito a sua lista, se puder dar um exemplo com bubbleSort em WindowsForms ajudaria muito.

Eu por si só tenho que criar os métodos,então n posso usar nenhum pronto

to gostando muito de Windows form,se tiver algum livro que vc recomenda,me avise pf.

Desde Já mt obrigado

To tentando aqui usar seu codigo para gerar os metodos de ordenação…

Se o usuário necessita visualizar a lista ordenada, no cenário que você passou nao precisa de complicações, o código que te passei no exemplo acima já faz isso de forma bem simples:

FonteDados.OrderBy(f => f)

Sobre outros métodos de ordenação não sei te ajudar.

@javaflex exatamente isso ,o usuario precisa visualizar a lista ordenada;

porém eu tenho que ordernar com tres metodos.

bubble sort
insert sort
select sort.

No caso eu preciso apenas a aprender como pegar o valor que foi guardado na lista

uma lista que possa ser aproveitada por qualquer metodo que receba ela como parametro

e usar ela em um qualquer metodo para poder ordenar eles.

        foreach (var valor in Lista)
        {
            //pegue o valor...
        }
1 curtida

Consegui aqui man… vc me indica algum livro pra eu ter um aprendizado melhor de windows form? to viciando nisso aqui,hahahahaa… Usa discord?

public void bubbleSort() {

        for (int i = 0; i < int.Parse(textBoxTamanhoArray.Text); i++)
        {
            for (int j = i; j < int.Parse(textBoxTamanhoArray.Text); j++)
            {
                if (FonteDados[i] > FonteDados[j])
                {
                    aux = FonteDados[i];
                    FonteDados[i] = FonteDados[j];
                    FonteDados[j] = aux;
                }
            }
        }

        for (int i = 0; i < int.Parse(textBoxTamanhoArray.Text); i++)
        {
            lblBubbleSort.Text += " " + FonteDados[i];
        }
    }

Nao sei. Via Google vai encontrar tudo que precisar, WindowsForms é uma tecnologia antiga e bem disseminada.

Nao, nem sei o que é isso.

@javaflex tudo bem ?

você poderia me ajudar com essa questao?

O usuario escolhe o tamanho do array, no caso na foto o usuario escolheu 1

logo ao lado de BubbleSort tem uma view
logo ao lado de insertSort tem uma view

ambas atualizam quando eu crio o array,
porém elas estão atualizando duas vezes

nesse caso eu digitei tamanho do array 1 e gerou dois numeros,era pra gerar só 1

você pode me ajudar aonde eu to errando?

{
public partial class Janela : Form
{
private bool Salvo = false; // Controla se o arquivo já foi salvo ou não
private IList FonteDados { get; set; } // VetorGlobal
private IList FonteDadosOrdenados { get; set; } // VetorGlobal
int aux; //auxiliar para ajudar nas trocas de posicões dos vetores

    Stopwatch BubbleWatch = new Stopwatch(); // Calcula o tempo de execução dos metodos
    Stopwatch TInsertWatch= new Stopwatch(); 
  

    public Janela()
    {
        
        FonteDados = new List<int>(); // Lista Global de Numeros Aleatorios
        FonteDadosOrdenados = new List<int>(); // Lista Global De Numeros Ordenados
        InitializeComponent(); // inicia Windows Forms
    }

    private void btnCriarArray_Click(object sender, EventArgs e)
    {
        AdicionarDadosNoArray(); 
        AtualizarListView();

        BubbleWatch.Start(); //Contagem Inicia do Bubble
        bubbleSort();
        BubbleWatch.Stop(); //Contagem termina do Bubble

        InsertSort();
        
        AtualizarListViewOrdenada();
    }

    private void AdicionarDadosNoArray() { //Metodo responsavel por gerar numeros aleatorios e guardar na lista global para ser reutilizada.

        Random numAleatorio = new Random();
        int numGerado;

        for (int i = 0; i < int.Parse(textBoxTamanhoArray.Text); i++) 
        {
            numGerado = numAleatorio.Next(-100, 100); // gera numeros aleatorios de 0 a 1000
            FonteDados.Add(numGerado); //lista global recebe cada elemento na posicao [i]
        }
    }

    private void AtualizarListView()
    { // metodo para atualizar os itens adicionados na lista global em uma lista view

        listViewArray.Clear(); 

        foreach (var item in FonteDados)
        {

            listViewArray.Items.Add(item.ToString());  //Exibi os numeros gerados na list view ao lado do botao criar Array
        }
    }

        private void AtualizarListViewOrdenada()
        { // metodo para atualizar os itens ordenados adicionados na lista global em uma listview

            listViewBubble.Clear();
            listViewInsert.Clear();

        foreach (var item in FonteDadosOrdenados)
        {
            listViewBubble.Items.Add(item.ToString());
            listViewInsert.Items.Add(item.ToString());
        }

    }


    public void bubbleSort() { // metodo Bubble sort


        for (int i = 0; i < int.Parse(textBoxTamanhoArray.Text); i++)
        {
            for (int j = i; j < int.Parse(textBoxTamanhoArray.Text); j++)
            {
                if (FonteDados[i] > FonteDados[j])
                {
                    aux = FonteDados[i];
                    FonteDados[i] = FonteDados[j];
                    FonteDados[j] = aux;
                }
            }
        }

        for (int i = 0; i < int.Parse(textBoxTamanhoArray.Text); i++)
        {
            FonteDadosOrdenados.Add(FonteDados[i]); 
        }

        textBoxTimeBubble.Text = BubbleWatch.Elapsed.ToString(); //Exibi o tempo de execução
    }

    public void InsertSort() {

        int j;

        for (int i = 1; i < int.Parse(textBoxTamanhoArray.Text); i++)
        {
            aux = FonteDados[i];
            j = i - 1;

            while ((j >= 0) && (aux < FonteDados[j]))
            {
                FonteDados[j + 1] = FonteDados[j];
                j--;
            }

            FonteDados[j + 1] = aux;
        }

        for (int i = 0; i < int.Parse(textBoxTamanhoArray.Text); i++)
        {
            FonteDadosOrdenados.Add(FonteDados[i]);
        }
    }

Eu criei dois tipos de lista Ordenada atualizada

AtualizarListViewOrdenadaBubble
AtualizarListViewOrdenadaInsert

e deu certo,mas o codigo ficou maior,não sei se essa é a melhor saida.

tos metodos fazem a mesma coisa,ai pensei que dava pra reaproveitar o codigo

Se só está aprendendo e isso nao tem utilização real para produção, não esquenta. Quando voce for trabalhar, 99% das vezes vai usar order by via SQL ou esse OrderBy do LINQ que tinha te passado, simples assim.

1 curtida