I made a 16 character code generator. It works like a charm now, but I was wondering if there's any way to do it more efficiently.

Just bear in mind I am quite new to C#, so don't just make my code more efficient, but explain to me how you do it.
 
    public partial class MainWindow : Window
    {

        //Globals
        string[] Letters = new string[27] { "A", "B", "C", "D", "E", "F", "G", "H", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
        string[] Numbers = new string[9] { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
 
        Random r = new Random();
        int i = 0;
        int a = 0;
        
        private string[] generateCode()
        {

            string[] RL = new string[9];
            string[] RN = new string[9];

            //Random letters
            while (i < 9)
            {
                RL[i] = Letters[r.Next(0, Letters.Length - 1)];
                i++;
            }
            //Random numbers
            while (a < 9)
            {
                RN[a] = Numbers[r.Next(0, Numbers.Length - 1)];
                a++;
            }

            TextBox.Text = String.Format("{0}{1}{2}{3}-{4}{5}{6}{7}-{8}{9}{10}{11}-{12}{13}{14}{15}", RN[0], RL[1], RN[1], RL[2], RN[2], RL[3], RN[3], RL[4], RN[4], RL[5], RN[5], RL[6], RN[6], RL[7], RN[7], RL[8], RN[8]);
            
            //Resetting the while loop
            i = 0;
            a = 0;

            //Clipboard
            Clipboard.SetText(TextBox.Text);
            Message.Content = ("Copied to clipboard!");

            return RL;
        }

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Generate_Click(object sender, RoutedEventArgs e)
        {
            generateCode();
        }