سلام
نزدیک امتحانات و وقتم خیلی کمه. معذرت می خوام اگه دیر به دیر ادامه میدم و نمی تونم زیاد بنویسم.
من یه پروژه جدید باز کردم و اسمش هست Project 1
یه textbox و یه button هم داره.
تا حالا کدش شده این : (اگه اینجا بررسیش سخته خودتون یه پروژه باز کنید و کدها رو اونجا ببینین)
کد:
#pragma once
namespace Project1 {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Summary for Form1
///
/// WARNING: If you change the name of this class, you will need to change the
/// 'Resource File Name' property for the managed resource compiler tool
/// associated with all .resx files this class depends on. Otherwise,
/// the designers will not be able to interact properly with localized
/// resources associated with this form.
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Add the constructor code here
//
}
protected:
/// <summary>
/// Clean up any resources being used.
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::Button^ button1;
private: System::Windows::Forms::TextBox^ textBox1;
protected:
private:
/// <summary>
/// Required designer variable.
/// </summary>
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
void InitializeComponent(void)
{
this->button1 = (gcnew System::Windows::Forms::Button());
this->textBox1 = (gcnew System::Windows::Forms::TextBox());
this->SuspendLayout();
//
// button1
//
this->button1->Location = System::Drawing::Point(37, 27);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(139, 42);
this->button1->TabIndex = 0;
this->button1->Text = L"button1";
this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
//
// textBox1
//
this->textBox1->Location = System::Drawing::Point(37, 104);
this->textBox1->Name = L"textBox1";
this->textBox1->Size = System::Drawing::Size(139, 20);
this->textBox1->TabIndex = 1;
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(284, 264);
this->Controls->Add(this->textBox1);
this->Controls->Add(this->button1);
this->Name = L"Form1";
this->Text = L"Form1";
this->ResumeLayout(false);
this->PerformLayout();
}
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
}
};
}
اینا کد توی فایل Form1.h هستن. خوب دقت کنید. کل کد توی یه namespace به نام Project1 یعنی اسم پروژه هست.
بعد از اون نیم اسپیس هایی که می خواییم استفاده کنیم رو تعریف می کنیم. (using)
بعد از اینا کلاس فرم شروع میشه.
از public ref class Form1 تا اون آخر براکت بسته و سمی کولون مربوط به کلاس فرم میشه. (براکت بعدش برای نیم اسپیس project1)
اون وسط تو کلاس فرم یه قسمت هست که با #pragma region شروع میشه و آخرش هم #pragma endregion هست. این مربوط میشه به خصوصیات فرم و اشیا روش و ما کاری بهش نداریم. هر تغییری که با طراحی رو فرم انجام میدیم خود IDE این کدها رو تولید می کنه. خیلی وقتها از کدهایی که اینتو هست میشه ایده گرفت. مثلا اینکه چطوری میشه اندازه یه کنترل رو تغییر داد یا تغییر رنگ و . . .
پایینش تعریف رویداد ها و توابع عضو فرم شروع میشه. اینجا دیگه شما تو کلاس فرم هستین و هرچی که بخاین میتونین بنویسین.
مثلا می تونید متغیر تعریف کنید. متغیری که اینجا بیرون به تابع یا رویداد تعریف کنید توی همه توابع کلاس فرم قابل استفاده. مثلا این رو ببینین :
کد:
.
.
.
#pragma endregion
int num;
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
num = 10;
textBox1->Text = num.ToString();
}
اگه با کلاس ها تو C++ آشنا باشید باید بدونید که قبل اون تعریف متغیر (که توی کلاس تعریف شده) می تونیم از public، private وprotected استفاده کنیم. مثلا اگه کد رو اینطوری بنویسیم از بیرون کلاس (مثلا یه فرم دیگه) هم میشه به اون متغیر دسترسی پیدا کرد.
کد:
.
.
.
#pragma endregion
public:int num;
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
num = 10;
textBox1->Text = num.ToString();
}
البته یه شرطی هم داره که بعدا بهش میرسیم.
همینطور تو این قسمت میتونید توابع عضو کلاس فرم رو هم تعریف کنید.
مثلا من یه تابع تعریف می کنم که دو عدد رو با هم جمع کنه و خروجی بده :
کد:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
textBox1->Text = add(2, 3).ToString();
}
private: int add(int num1, int num2) {
return (num1 + num2);
}
چون خروجی تابع add یه int بود برای نمایشش تو textbox از ToString استفاده کردم. اون private قبلش هم میتونیستید ننویسین. در اینصورت فکر می کنم از حوزه ای که قبلا مشخص شده پیروی می کنه. بالاش رویداد کلیک button1 با private تعریف شده پس تابع add هم همینطور . . . یعنی بیرون از کلاس فرم در دسترس نیست و فقط توی همین کلاس فرم میشه ازش استفاده کرد.
همونطور که میبینین اینجا بحث های شی گرایی خیلی داغ شده (برعکس وی بی 6) و برنامه نویسی اصولی تره ! من که از وقتی c++ رو شروع کردم اوایل برام سخت بود و عذاب میکشیدم ! ولی الان عادت کردم و حتی از برنامه نویسی با C++ لذت میبرم ! اگه براتون عجیبه یکم تحمل کنید ! کم کم درست میشه !
هدفم از این پست این بود با محیطی که توش کد مینویسین آشنا بشین ! چون میدونم اوایل اصلا بهش دقت نمیکنین. حالا چشم و گوشتون بازتر میشه!
خوش باشین !
راستی اون کد تبدیل استرینگ رو امتحان کردم نشد ! شما امتحان کردی ؟!