2015-01-25 3 views
1

Я пытаюсь выполнить задание для нового класса C#, используя VS, используя приложение формы Windows (все новое для меня, код и все). Нам было назначено создание создателя предложений с различными словами, которые были кнопками; а затем, когда приложение запускается, пользователь может щелкнуть по кнопкам, чтобы построить предложение; который затем отображается в элементе управления Label.Приложение Sentence Builder в C#

Ну, у меня есть форма, и из другой информации, которую я нашел на этом сайте для аналогичного вопроса; дошли до этого. НО моя проблема - мой инструктор сказал, что мы должны конкатенировать результаты в выводе Label, но FIRST Я не знаю, как это сделать, когда кто-то просто случайно щелкает буквами или словами ** (с тем, что мы узнали до сих пор).

Я получил его для запуска со следующим кодом (без конкатенации на ярлыке); кроме события «spaceButton» помещает IN в текст «(Space)», потому что это его текст ... Я изменил его на «» в коде, и, если я нажму на него, он будет помещен в пробелы, но изменит текст в запущенном приложении на пустую кнопку. Я не знаю, как это исправить.

У меня был этот инструктор до и в то время как я мог бы работать вокруг конкатенации в "sentenceOutputLabel" - я мог бы очень хорошо получить нуль, потому что я не конкатенация на выходной метке.

Лаура

Вот весь код:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace Sentence_Builder 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void upperCaseAButton_Click(object sender, EventArgs e) 
    { 

     string output; 
     output = upperCaseAButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void lowerCaseAButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = lowerCaseAButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void upperCaseAnButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = upperCaseAnButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void lowerCaseAnButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = lowerCaseAnButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void upperCaseTheButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = upperCaseTheButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void lowerCaseTheButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = lowerCaseTheButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void manWordButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = manWordButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void womanWordButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = womanWordButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void dogWordButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = dogWordButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void catWordButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = catWordButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void carWordButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = carWordButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void bicycleWordButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = bicycleWordButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void beautifulWordButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = beautifulWordButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void bigWordButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = bigWordButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void smallWordButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = smallWordButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void strangeWordButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = strangeWordButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void lookedAtWordButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = lookedAtWordButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void rodeWordButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = rodeWordButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void spokeToWordButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = spokeToWordButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void laughedAtWordButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = laughedAtWordButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void droveWordButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = droveWordButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void spaceButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = spaceButton.Text = " "; 
     sentenceOutputLabel.Text += output; 
    } 

    private void periodButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = periodButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 

    private void exclamButton_Click(object sender, EventArgs e) 
    { 
     string output; 
     output = exclamButton.Text; 
     sentenceOutputLabel.Text += output; 
    } 
    /I DON'T EVEN KNOW WHAT I NEED THIS below FOR NOW 
    private void sentenceOutputLabel_Click(object sender, EventArgs e) 
    { 

     //string output; 
     // sentenceOutputLabel.Text = sentenceOutputLabel.Text; 
    } 

    private void clearButton_Click(object sender, EventArgs e) 
    { 
     sentenceOutputLabel.Text = ""; 
    } 

    private void exitButton_Click(object sender, EventArgs e) 
    { 
     this.Close(); 
    } 
    }  
}` 
+3

[** Minimal, Complete, Проверяемость Пример **] (https://stackoverflow.com/help/mcve) пожалуйста ... не нужен весь ваш HW –

+0

Спасибо Джон, я не был» t знает о минимальной, полной, проверяемой проблеме. – Lorelei7

ответ

1

Я думаю, что решение может быть просто так просто, это не приходило в голову, что было разрешено:

private void spaceButton_Click(object sender, EventArgs e) 
{ 
    string output; 
    output = " "; // don't necessarily have to use the Text property of the button ... 
    sentenceOutputLabel.Text += output; 
} 
+0

Я только что прочитал ваш вопрос и заметил вашу обеспокоенность по поводу того, что преподаватель не использовал свойство «Текст» кнопки нажатой. Я не думаю, что это должно быть проблемой, потому что, когда это имеет смысл сделать это, вы можете использовать текст кнопки и - там, где это не имеет смысла (т. Е. '(Space)' отображается для " ") - ты не. –

+0

На картинке, на которой должен был отображаться вывод, кнопка с названием «пробел» выглядела так: (Космос), и это было то, что было написано на кнопке (текст), пытаясь заставить ее просто дать пробел что кажется проблемой .. Джон С - изменение кода, как описано выше! Спасибо! Теперь мне просто нужно проверить, нуждается ли мой код в методе sentenceOutputLabel. – Lorelei7

+0

В этом случае я бы [принял] (https://stackoverflow.com/help/accepted-answer) один из этих ответов, прежде чем переходить к остальной части моей домашней работы - это больше или меньше, как люди на этом сайте получать деньги. Я лично принял бы ответ Брэда Кристи, поскольку он дал лучший способ сделать то же самое (свойство «Tag»), и он сделал это без продажи и просто дал вам ответ, как и все остальные (включая меня!). –

2

Если бы я правильно понял описание задания, я бы это сделал:

using System; 
using System.Windows.Forms; 

namespace StringBuilder 
{ 
    public partial class frmMain : Form 
    { 
     public frmMain() 
     { 
      InitializeComponent(); 
     } 

     private void btnInput_Click(object sender, EventArgs e) 
     { 
      Button button = sender as Button; 
      if (button != null) 
      { 
       if (button.Text == "Space") 
        lblOutput.Text += " "; 
       else 
        lblOutput.Text += button.Text; 
      } 
     } 
    } 
} 

С помощью этого кода каждой отдельной кнопке можно назначить обработчик события btnInput_Click, а lblOutput - это только результат.

+0

Это просто классно, и я понятия не имел, что это можно сделать. Я думаю, что я начну новый проект, а потом посмотрю, что произойдет! :) – Lorelei7

+0

Да, это действительно легко! Если у вас есть еще вопросы по поводу кода, просто дайте мне знать! – Minato

1

Я не дам вам решение, но, возможно, я смогу предоставить немного больше рекомендаций и помочь в процессе обучения.

Прежде всего, значение, которое вы связываете, не имеет, чтобы исходить от самой кнопки. Способ, которым вы его устанавливаете, каждая кнопка имеет назначенное событие (*_CLick(object,EventArgs)). Если вы уже знаете, какая кнопка нажата, использование этой кнопки .Text действительно не нужно. Поэтому не стесняйтесь использовать желаемый результат в этом методе и не придерживайтесь кнопки .Text.

Кроме того, исходя из того, что вы описали, вы выполняете часть конкатенации (вы, похоже, неохотно верите в это). Каждый раз, когда вы добавляете (+=) текст щелкнутого элемента к текущему значению метки, которое вы объединяете (только C# делает для вас работу).

Чтобы сделать это еще дальше, каждый элемент управления имеет свойство Tag. Это позволяет вам указывать метаданные и связывать их с , что конкретный элемент управления. Вы можете захотеть указать желаемый результат (в отношении того, что добавляется к финальной метке) в качестве тега кнопки, а затем добавить это значение (над текстом кнопки). Вы также можете использовать один метод *_Click(object,EventArgs) и просто конкатенировать ((Button)sender).Tag.

+0

Свойство «Tag» похоже на правильный подход ...это очень хорошо, может быть, то, что ищет инструктор, с точки зрения того, что не хватило на то, чтобы не конкатенировать с использованием свойства 'Button'. –

+0

Если вам нужно больше информации: https://github.com/bchristie/StackOverflow-Examples/tree/question-28141853 –

0

Вот пример того, как вы можете использовать общее событие click и как использовать свойство Tag для хранения значения, которое должно быть добавлено к метке (которое может отличаться от значения, отображаемого в тексте Button).

Я динамически добавляю кнопки, которые вам не нужно делать, но таким образом вы можете скопировать/пропустить код в новый проект и запустить его. Надеюсь, это поучительно, но не то, что вы включили бы в свою работу.

public partial class Form1 : Form 
{ 
    Label sentenceOutputLabel = new Label(); 

    public Form1() 
    { 
     InitializeComponent(); 

     int padding = 10; 

     // Add a label to the form 
     sentenceOutputLabel.Width = ClientSize.Width - (padding * 2); 
     sentenceOutputLabel.Top = padding; 
     sentenceOutputLabel.Left = padding; 
     sentenceOutputLabel.BorderStyle = BorderStyle.FixedSingle; 
     Controls.Add(sentenceOutputLabel); 

     // List of words that, for each one, we'll add a button to the form 
     // Note that some words have two parts: the first part is the button 
     // text, followed by a colon, then followed by the tag text. We split 
     // these out later, when assigning button properties 
     var words = new List<string> 
     { 
      "A", "a", "An", "an", "The", "the", "man", "woman", "dog", "cat", 
      "car", "bicycle", "beautiful", "big", "small", "strange", "looked", 
      "rode", "spoke", "laughed at", "drove", "[space]: ", "[period]:.", 
      "[exclamation]:!" 
     }; 

     // Get the width of the longest word so we size the buttons accordingly 
     int width; 
     using (Graphics cg = CreateGraphics()) 
     { 
      width = Convert.ToInt32(cg.MeasureString(words.Aggregate("", (max, cur) => 
       (cg.MeasureString(max, new Button().Font).Width) > 
       (cg.MeasureString(cur, new Button().Font).Width) 
        ? max 
        : cur), new Button().Font).Width); 
     } 

     // Add the buttons to the form, spacing them evenly 
     int left = padding; 
     int top = sentenceOutputLabel.Bottom + padding; 
     int bottomOfLastButton = 0; 

     foreach (var word in words) 
     { 
      // For some words, we have a colon-separated symbol that we 
      // will use instead of the word (like 'space', for example) 
      // So we store the symbol in the 'Tag' property and the word 
      // in the text property. 
      var wordParts = word.Split(':'); 
      var text = wordParts[0]; 
      var tag = wordParts.Length > 1 ? wordParts[1] : text; 

      var button = new Button 
      { 
       Text = text, 
       Tag = tag, 
       Left = left, 
       Top = top, 
       Width = width, 
       Visible = true 
      }; 

      // HERE WE ADD A COMMON CLICK EVENT 
      button.Click += wordButton_Click; 

      // Add the button to the form 
      Controls.Add(button); 

      // Reset left and top if we're going past the width of the form 
      left += (width + padding); 
      if (left + width + padding > ClientSize.Width) 
      { 
       left = padding; 
       top += button.Height + padding; 
      } 

      bottomOfLastButton = button.Bottom; 
     } 

     // Add a clear and exit button 
     var exitButton = new Button 
     { 
      Top = bottomOfLastButton + (padding * 2), 
      Text = "Exit", 
      Left = ClientSize.Width - padding - width, 
      Width = width 
     }; 
     exitButton.Click += exitButton_Click; 

     var clearButton = new Button 
     { 
      Top = bottomOfLastButton + (padding * 2), 
      Text = "Clear", 
      Left = exitButton.Left - padding - width, 
      Width = width 
     }; 
     clearButton.Click += clearButton_Click; 

     Controls.Add(exitButton); 
     Controls.Add(clearButton); 
    } 

    void clearButton_Click(object sender, EventArgs e) 
    { 
     sentenceOutputLabel.Text = ""; 
    } 

    void exitButton_Click(object sender, EventArgs e) 
    { 
     Close(); 
    } 

    void wordButton_Click(object sender, EventArgs e) 
    { 
     var wordButton = sender as Button; 

     if (wordButton != null) 
     { 
      sentenceOutputLabel.Text += wordButton.Tag; 
     } 
    } 
} 
+0

никаких проблем с моим кодом копирования ... для одного; Я считаю это нечестным и для двоих, я понятия не имею, что означает половина вашего. Я действительно новичок в этом, как 2 недели в классе. Спасибо, что поделились своим примером. – Lorelei7

Смежные вопросы