ایجاد لیست 2 بعدی

m_mx2009

Member
سلام دوستان
چطور میتونم یک لیست 2 بعدی داخل بدنه اصلی کلاس فرم تعریف کنم و ازش در جاهای دیگه استفاده کنم؟
از قبل سپاسگزارم
 

the_king

مدیرکل انجمن
سلام دوستان
چطور میتونم یک لیست 2 بعدی داخل بدنه اصلی کلاس فرم تعریف کنم و ازش در جاهای دیگه استفاده کنم؟
از قبل سپاسگزارم

فرقی نمی کنه که نوع متغیر چی باشه، هر چه که داخل کلاس بصورت public تعریف کنید در خارج از کلاس قابل استفاده است.
برای هر تغییری در یک کلاس آماده مثل Form ازش ارث یری می کنید و یک کلاس جدید ایجاد میشه، مثل Form1
حالا در بدنه کلاس ای مثل Form1 متغیر تعریف می کنید، قبلا در مورد تعریف متغیر به دو روش static و non-static توضیح داده شده.
اگر منظور از لیست دو بعدی، دقیقا List دو بعدی است، <<List<List<aaa تعریف یک لیست دو بعدی از نوع aaa است.
 

m_mx2009

Member
بله...خیلی ممنونم..همون مشکل تعریف لیست دو بعدی رو داشتم که حل شد خوشبختانه...
فقط یه سوال دیگه هم دارم :
من یک پروژه به سلوشن اضافه کردم...حالا میخوام به یکی از فرم های پروژه دیگر دسترسی پیدا کنم...اصلا همچین کاری شدنی هست؟...
یا راه حل دیگه ای رو باید در نظر بگیرم؟
با تشکر از پاسخ هاتون...
 

the_king

مدیرکل انجمن
بله...خیلی ممنونم..همون مشکل تعریف لیست دو بعدی رو داشتم که حل شد خوشبختانه...
فقط یه سوال دیگه هم دارم :
من یک پروژه به سلوشن اضافه کردم...حالا میخوام به یکی از فرم های پروژه دیگر دسترسی پیدا کنم...اصلا همچین کاری شدنی هست؟...
یا راه حل دیگه ای رو باید در نظر بگیرم؟
با تشکر از پاسخ هاتون...

Solution می تونه شامل چندین پروژه باشه، در این مورد محدودیت خاصی ندارید. می توانید Solution ای داشته باشید که از دو پروژه #C و یک پروژه Visual Basic تشکیل شده باشه.
می تونه سه تا شون پروژه اجرایی باشه یا ترکیبی از پروژه اجرایی و پروژه کتابخانه توابع.
منوی File گزینه Add گزینه ...New Project یا ...Existing Project را انتخاب کنید.

اگر در پنجره Solution Explorer ویژوال استدیو خود Solution را انتخاب کنید، یک مشخصه Startup Project داره که پروژه اصلی که اجرا ازش آغاز میشه را تعیین می کنه.
اگر روی هر کدام از پروژه ها در Soution Explorer راست کلیک کنید گزینه ...Add Reference داره. اونجا می توانید در زبانه Projects اون Reference مورد نظرتون را از داخل خود Solution
انتخاب کنید. یعنی به ویژوال استدیو اعلام می کنید که فلان پروژه برای اجرا به فلان پروژه دیگه احتیاج داره و به فرم ها و سایر بخش های داخلش دسترسی خواهد داشت.
وقتی اینکار رو انجام دادید یکبار خود Solution را بصورت کامل کامپایل و Build کنید، بدون خطا. وگرنه پیش از کامپایل اجزاء پروژه Reference شده آماده استفاده نیست.

در مثال زیر در Solution مربوط به پروژه CSharpA پروژه VisualBasicA اضافه شده و همچنین داخل پروژه CSharpA پروژه VisualBasicA بصورت Reference قرار گرفته.
فرم Form1 داخل پروژه ویژوال بیسیک از داخل پروژه سی شارپ ایجاد شده و نمایش داده میشه :

کد:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

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

        private void button1_Click(object sender, EventArgs e)
        {
            using (var f1 = new VisualBasicA.Form1())
            {
                f1.ShowDialog(this);
            }
        }
    }
}

اما هر چقدر پروژه ها بیشتر و حجم اش سنگین تر بشه طبعا روی سرعت ویژوال استدیو تاثیر منفی داره.
 

m_mx2009

Member
عذر میخوام ک سوالام زیاده...
میشه در مورد فراخوانی یک متد از یک فرم دیگر هم توضیح بفرمایید...

مثلا یه متد در فرم اصلی برنامه دارم...میخوام از یکی از فرم های Child بتونم به یکی از متد های فرم اصلی دسترسی داشته باشم و بتونم اونو اجراش کنم...
حیلی سرچ کردم ولی به نتیجه ای نرسیدم...
سپاس فراوان...:rose:
 

the_king

مدیرکل انجمن
عذر میخوام ک سوالام زیاده...
میشه در مورد فراخوانی یک متد از یک فرم دیگر هم توضیح بفرمایید...

مثلا یه متد در فرم اصلی برنامه دارم...میخوام از یکی از فرم های Child بتونم به یکی از متد های فرم اصلی دسترسی داشته باشم و بتونم اونو اجراش کنم...
حیلی سرچ کردم ولی به نتیجه ای نرسیدم...
سپاس فراوان...:rose:

هیچ تفاوتی با نحوه دسترسی به یک متغیر نداره، متد هم با همان شرایط قابل دسترسی ئه که متغیر قابل دسترسی ئه. همون مبحث static و non-static بودن متغیر
در مورد متد هم صدق می کنه. متد ها معمولا بدون مشکل می توانند non-static باشند، اما هر متدی رو نمیشه static تعریف کرد. دلیلش اینه که یک متد static فقط به
اجزاء static کلاس دسترسی داره، داخل یک نمونه شیء از کلاس اجرا نمیشه، اگر در کلاس یک متغیر یا تابع non-static داشته باشید، نمی توانید از داخل یک متد static
بهشون دسترسی داشته باشید، مگر توسط پارامتر هایی که به عنوان ورودی به متد تحویل می دهید.

پس متدی می تونه static باشه که هیچ کاری با متد ها و متغیر های non-static نداشته باشه. فرضا دکمه button1 ای که روی فرم قرار می گیره non-static ئه
(تا زمانی که فرمی ایجاد نکرده اید دکمه ای هم قابل دسترسی نیست). اگر متدی بنویسید که داخلش با دکمه button1 روی فرم کار داشته باشه، باید متد رو non-static تعریف کنید.
زمانی می توانید همچین متدی رو static تعریف کنید که شیء دکمه مثلا b رو به عنوان یک پارامتر ورودی بهش ارسال کنید.
 

m_mx2009

Member
بله خیلی ممنون....کامل فهمیدم چی به چیه...
فقط یه جای دیگه مشکل دارم...داخل یه پروژه که به سلوشن اضافه کردم ، یه پورت سریال تعریف شده و کارای خودش رو میکنه فقط میخوام وقتی که دیتای جدید وارد شد و رویداد مربوط به سریال داخل اون پروژه اجرا شد ، من بتونم داخل پروژه اصلی هم از اجرا شدنش با خبر بشم...
چطور میتونم اینکارو بکنم؟
با تشکر از وقتی که میذارید...
 

جدیدترین ارسال ها

بالا