Visual C++ .NET/GUI Form/RichTextBox

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Rich Text area demo

 
  using namespace System;
  using namespace System::ComponentModel;
  using namespace System::Collections;
  using namespace System::Windows::Forms;
  using namespace System::Data;
  using namespace System::Drawing;
  public ref class Form1 : public System::Windows::Forms::Form
  {
  public:
    Form1(void)
    {
      InitializeComponent();
            BuildLabels();
    }
  private:
        System::Windows::Forms::RichTextBox^  rtBox;
        array<System::Windows::Forms::Label^>^ labels; 
    void InitializeComponent(void)
    {
            this->rtBox = (gcnew System::Windows::Forms::RichTextBox());
            this->SuspendLayout();
            // 
            // rtBox
            // 
            this->rtBox->Anchor = 
                static_cast<System::Windows::Forms::AnchorStyles>
                ((((System::Windows::Forms::AnchorStyles::Top 
                | System::Windows::Forms::AnchorStyles::Bottom) 
                | System::Windows::Forms::AnchorStyles::Left) 
                | System::Windows::Forms::AnchorStyles::Right));
            this->rtBox->Location = System::Drawing::Point(0, 32);
            this->rtBox->Name = L"rtBox";
            this->rtBox->RightMargin = 900;
            this->rtBox->ScrollBars = 
                System::Windows::Forms::RichTextBoxScrollBars::ForcedVertical;
            this->rtBox->ShowSelectionMargin = true;
            this->rtBox->Size = System::Drawing::Size(950, 488);
            this->rtBox->TabIndex = 1;
            this->rtBox->Text = L"";
            this->rtBox->KeyDown += 
                gcnew System::Windows::Forms::KeyEventHandler(this, 
                                                       &Form1::rtBox_KeyDown);
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(950, 520);
            this->Controls->Add(this->rtBox);
            this->Name = L"Form1";
            this->Text = L"(Very Simple Rich Text Editor)";
            this->ResumeLayout(false);
    }
        void BuildLabels()
        {
            array<String^>^ rtLabel = gcnew array<String^> {
                L"F1-Bold",   L"F2-Italics", L"F3-Underline",
                L"F4-Normal", L"F5-Red",     L"F6-Blue",
                L"F7-Green",  L"F8-Black",   L"F9-Load",    
                L"F10-Save"
            };
            labels = gcnew array<System::Windows::Forms::Label^>(10);

            // Build the labels
            for (int i = 0; i < labels->Length; i++)
            {
                labels[i] = gcnew Label();
                labels[i]->BackColor = SystemColors::ControlDark; 
                labels[i]->BorderStyle = BorderStyle::FixedSingle; 
                labels[i]->Location = Drawing::Point(5+(95*i), 8); 
                labels[i]->Size = Drawing::Size(85, 16); 
                labels[i]->Text = rtLabel[i]; 
                labels[i]->TextAlign = ContentAlignment::MiddleCenter; 
            }
            // Place labels on the Form
            Controls->AddRange(labels);
        }
        System::Void rtBox_KeyDown(System::Object^ sender, 
                                   System::Windows::Forms::KeyEventArgs^ e)
        {
            try
            {
                if (rtBox->SelectionLength > 0) 
                {
                    // Change selected text style
                    FontStyle fs;
                    switch (e->KeyCode) 
                    {
                        case Keys::F1: 
                            fs = FontStyle::Bold;                    
                            break; 
                        case Keys::F2: 
                            fs = FontStyle::Italic;                   
                            break; 
                        case Keys::F3: 
                            fs = FontStyle::Underline;
                            break; 
                        case Keys::F4: 
                            fs = FontStyle::Regular;
                            break; 
                    // Change selected text color
                        case Keys::F5: 
                            rtBox->SelectionColor = Color::Red; 
                            break; 
                        case Keys::F6: 
                            rtBox->SelectionColor = Color::Blue; 
                            break; 
                        case Keys::F7: 
                            rtBox->SelectionColor = Color::Green; 
                            break; 
                        case Keys::F8: 
                            rtBox->SelectionColor = Color::Black; 
                            break; 
                    }
                    // Do the actual change of the selected text style
                    if (e->KeyCode >= Keys::F1 && e->KeyCode <= Keys::F4)
                    {
                        rtBox->SelectionFont = gcnew Drawing::Font( 
                            rtBox->SelectionFont->FontFamily, 
                            rtBox->SelectionFont->Size, 
                            fs 
                        );
                    }
                }
                // Load hard coded Chapter01.rtf file
                else if (e->KeyCode == Keys::F9)
                {
                    rtBox->LoadFile("Chapter01.rtf");
                }
                // Save hard coded Chapter01.rtf file
                else if (e->KeyCode == Keys::F10)
                {
                    rtBox->SaveFile("Chapter01.rtf", 
                                    RichTextBoxStreamType::RichText);
                }
            }
            // Capture any blowups
            catch (Exception ^e)
            {
                MessageBox::Show(String::Format("Error: {0}", e->Message));
            }
        }
  };
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
  Application::Run(gcnew Form1());
  return 0;
}