Estrutura de um código de número aleatórios e não repetidos

Olá, estou tentando fazer um sistema para gerar número aleatórios no C#, onde o usuário informa quantos números quer que o faça o sorteio e o intervalo que ele deseja que o sistema faça o sorteio. Inicialmente eu fiz este código:

private void button1_Click(object sender, EventArgs e)
{
Random aleatorio = new Random();

        int x,y;
        x = Convert.ToInt32(textBox2);
        y = Convert.ToInt32(textBox3);
        int valor = aleatorio.Next(x, y);
        valor = Convert.ToInt32(textBox1);

        for (int i = 0; i <= valor; i++)
        {
            label4.Text = valor.ToString();
            if (valor <= 1)
            {
                MessageBox.Show("Por favor, preencha os campos necessários!", "Message", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                textBox1.Focus();
                return;
            }
        }

mas ocorre erro após preencher os textboxes e clico no button.
Segue imagens do erro:

O design tem um textbox para receber a quantidades de número que o usuário quer sortear e mais dois textbox para informar o intervalo (mínimo e máximo) e uma label para exibir o resultado.
Alguém pode ajudar?

Ao invés de tentar converter o textobox para um número (o que é incompatível), acho que você quer converter o texto digitado nele. Nesse caso, obtenha-o com a propriedade Text do.

Ou seja, ao invés de:

x = Convert.ToInt32(textBox2);
y = Convert.ToInt32(textBox3);

Tente:

x = Convert.ToInt32(textBox2.Text);
y = Convert.ToInt32(textBox3.Text);

Abraço.

TerraSkilll funcionou. Muito obrigado pela ajuda. Não tinha percebido isso. kkkkkk Valeu mesmo.