PDA

مشاهده نسخه کامل : طرح مشکلات ، سوالات ، آموزش ها و پروژه های مربوط به زبان های دیگر تحت دات نت



h.moradof
07-07-09, 18:01
سلام
هر کس سوالی درباره دات نت داره اینجا مطرح کنه تا دوستان جواب بدن
تا سوالات و جوابها یکپارچه بشه :1. (38):

مشکلات و سوالات خود در مورد دات نت و زبان های دیگر تحت دات نت در این تاپیک مطرح کنید .

h.moradof
07-07-09, 18:03
اولین سوالو هم خودم می پرسم:
آیا کسی کار این دستوراتو میدونه؟

selstart
selLengh

ravegoat
08-07-09, 11:06
اولین سوالو هم خودم می پرسم:
آیا کسی کار این دستوراتو میدونه؟

selstart
selLengh



با سلام!
دوست عزیز مطمئن هستید که این دستور برای دات نت هست؟:1. (38):
تا اون جایی که من می دونم این یک دستور معروف در VB6 هست که با اون میشه متن توی یک TextBox رو انتخاب کرد (Select). دستور معادل اون در VB.Net وجود داره.:wink:
حالا شاید این دستور ها توی .Net باشه ولی من هیچ اطلاعی ازشون ندارم.:1. (28):

شاد باشید
آرمین:11():

h.moradof
09-07-09, 01:32
سلام دوستان
خیلی ممنون از کمک هاتون
آقای revegoat از شما هم خیلی ممنونم مشکلم حل شد . دیگه ارور نمیده
خوب آدم به دات نت زیاد وارد نباشه و پروژه ساخت دات نتی برداره نتیجش همین میشه دیگه
نتیجش میشه من !
بازم خوب شد که شما دوستان رو دارم وگرنه .....
Only the registered members can see the link (Only the registered members can see the link)
یه لینک خوب هم پیدا کردم که توش یه pdf هست که درباره ارتباط با پورت سریال خیلی عالی گفته
حتما بخونین هم برنامه وی بی شو گفته و هم بسکامشو
ولی حیف که دات نت کار نکرده....
لینک. بالا گذاشتم..
موفق باشید

h.moradof
09-07-09, 04:01
سلام دوستانی که مشکلاتی درباره مسائل مشترک دات نت و AVR دارن لطفا اینجا بیان کنن.ممنون:love:

h.moradof
09-07-09, 04:04
سلام. اولین سوال هم خودم میپرسم !
من میخوام یه داده رو از دات نت به avr (میکرو) از طریق پورت سریال ارسال کنم و میکرو هم داده منو بشناسه و یه کاری رو انجام بده.
کد های زیر رو هم برای avr و دات نتم نوشتم ولی کار نمیده و میکرو چیزی نمی گیره . کسی پیشنهادی کمکی چیزی داره ؟؟؟
این کد دانت:

Public Class Form1
Dim s As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort1.PortName = "com1"
SerialPort1.DataBits = 8
SerialPort1.BaudRate = 4800
SerialPort1.Open()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SerialPort1.Write("3")
End Sub
End Class
البته من کامپوننت serialport رو به فرمم اضافه کردم ..
ابن هم دستورات بسکامم:

$regfile = "m16def.dat" ' specify the used micro
$crystal = 4000000 ' used crystal frequency
$baud = 4800 ' use baud rate
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0 , E = Porta.4 , Rs = Porta.5
Cursor Off
Dim V As String * 1
Config Portb = Output
Cls
Do
Locate 2 , 1
Lcd "salam hamidi"
Locate 1 , 1
Lcd V
Reset Portb.1
Input V
If V = "3" Then Goto Led
Loop
Led:
Cls
Do
Locate 1 , 1
Lcd V
Locate 2 , 1
Lcd "yuhooo"
Set Portb.1
Loop

+makintash
09-07-09, 18:47
اگه فایل ماکرو رو داشته باشی میتونی با یه کامپایلر اسمبلی فایل هگز رو به راحتی روی avr بریزی!
حالا چرا با دات نت ؟
اسمبلی یا c++ جواب بهتری میگیری چون از نظر ظرفیت rom در avr باید ظرفیت بیشتری رو برای برنامه در نظر بگیری که اصلا به صرفه نیست!

h.moradof
09-07-09, 19:50
:1. (28):آخه فقط با دات نت کار کردم (یکم) و با بقیه کار نکردم
حالا کسی پیشنهادی داره ؟
به نظرتون برنامم درسته ؟
چجوری درستی برنامه هامو تست کنم ؟:cry:
یکی به دادم برسه ....

ravegoat
10-07-09, 09:23
h.moradof:

کد شما رو بررسی کردم، تو تحلیلش مشکل داشتم . کد شما رو فرستادم برای یکی از دوستانم تا ایشون بررسی کنند. امیدوارم سریع مشکلتون حل بشه.

چون سوال شما با سخت افزار هم در ارتباط هستش؛ پس لطفا" مشخصات میکرو + نحوه ی ارتباط از طریق پورت رو هم بیان کنید (یه توضیح مختصر).

آرمین؛

+makintash
10-07-09, 23:29
h.moradof:

کد شما رو بررسی کردم، تو تحلیلش مشکل داشتم . کد شما رو فرستادم برای یکی از دوستانم تا ایشون بررسی کنند. امیدوارم سریع مشکلتون حل بشه.

چون سوال شما با سخت افزار هم در ارتباط هستش؛ پس لطفا" مشخصات میکرو + نحوه ی ارتباط از طریق پورت رو هم بیان کنید (یه توضیح مختصر).

آرمین؛

دوست من اگه یه نگاه به کدهای بیسکامی که دوستمون گذاشتند می کردی متوجه مقادیر پارامتر ها می شدید !
میکروش سری atmega 16 با کلاک خارجی 4 مگاهرتز و باود 4800.
دوست من برای تحلیل کدها امکانش هست فلوچارت برنامه ات رو بدی البته تا اینجا مطلب
شما خواستید یه برنامه تست lcd رو با avr اجرا کنید که برای تحلیل برنامه نیاز به جزئیات برنامه هست!

ravegoat
11-07-09, 21:35
دوستان رشته ی بنده الکترونیک نیست. اگر اشتباهی در کار من مشاهده کردید، به بزرگواری خودتون ببخشید.
+makintash ، دوست عزیز از تذکرتون سپاس گزارم.

با مشورت هایی که انجام شد، احتمال دادیم مشکل از نحوه ی اتصال باشه.
تصویر زیر یه شکل اتصال رو بیان می کنه:


Only the registered members can see the link


چیز بیش تری دستم رسید، در اختیارتون قرار می دم.

موفق باشید
آرمین:11():

SajjadKhati
07-02-16, 15:08
سلام
این کد چرا ارور میده؟ :



int x;
MessageBox.Show(x.ToString());

ravegoat
08-02-16, 08:30
سلام
این کد چرا ارور میده؟ :



int x;
MessageBox.Show(x.ToString());

سلام!

مقداری برای x تعریف نشده و در سی شارپ برخلاف زبان های مفسری اگر متغیری مقدار دهی نشه، مقدار پیش فرضی برای اون در نظر گرفته نمیشه.

SajjadKhati
08-02-16, 10:55
سلام!

مقداری برای x تعریف نشده و در سی شارپ برخلاف زبان های مفسری اگر متغیری مقدار دهی نشه، مقدار پیش فرضی برای اون در نظر گرفته نمیشه.

ممنون استاد آرمین
ولی من تو آموزشی که از یه شرکت دارم ، بصورت تئوری گفت که مقدار پیش فرض داره اگه ندیم اما عملی انجام نداد

SajjadKhati
13-02-16, 21:37
سلام
آقا آرمین مبحث چند ریختی با توضیح ساده رو کجا میتونم بخونم؟ این کسی که آموزشش رو میبینم ، همه چی رو خوب و ساده توضیح میده . چند ریختی رو هم همینطور ولی روی چند ریختی زیاد تمرکز نکرد
این چیزایی که از چند ریختی میگم ، ببینین درسته یا چیزای دیگه ای هم هست؟ :

چندریختی یعنی تابعی در کلاس پدر رو میشه در کلاس فرزند ، تغییر داد که میشه همون از یه تابع ، به چند شکل و ریخت استفاده کرد . با استفاده از کلمه virtual در کلاس پدر میشه به تابع این قابلیت رو اضافه کرد . با استفاده از کلمه override در کلاس فرزند ، میشه تابع پدر رو تغییر داد به دلخواه
یا به عبارتی تابع چند ریختی فقط توی کلاس پدر با کلمه ی virtual تعریف میشه . نه هیچ کلاس دیگه ای و تغییر این تابع فقط توی کلاس فرزند با کلمه ی override انجام میشه نه هیچ کلاس دیگه ای
در کلاس فرزند اگه بخوایم تابع چند ریختی رو تغییر بدیم ، چون به نوعی تابع مجدد تعریف باید بشه و تابع هم فقط در سطح (داخل) کلاس تعریف میشه ، پس برای تغییر تابع چند ریختی یا در واقع باید کلمه ی override را داخل و در سطح کلاس بنویسیم نه در داخل توابع یا متد دیگه و ... و بعدش هم هر جور خواستیم بدنه و خروجی شو تغییر میدیم
چون تابع چند ریختی باید از کلاس فرزند در دسترس باشه تا لود شه ، پس باید سطح دسترسی این نوع تابع در کلاس پدر که تعریف کردیم ، public باشه
برای فراخونی این تابع چند ریختی شده یعنی تغییر داده شده ، که داخل کلاس فرزند تعریف کردیم ، مثل حالت عادی ، با ایجاد شی از کلاس های دیگه ، در دسترسه

--------------

خسته میشین بخونین :Love-ssa~! (1):
نکته ی دیگه ای هست که فکر کنم باشه یا فقط همینه؟

ravegoat
27-02-16, 10:29
سلام
آقا آرمین مبحث چند ریختی با توضیح ساده رو کجا میتونم بخونم؟ این کسی که آموزشش رو میبینم ، همه چی رو خوب و ساده توضیح میده . چند ریختی رو هم همینطور ولی روی چند ریختی زیاد تمرکز نکرد
این چیزایی که از چند ریختی میگم ، ببینین درسته یا چیزای دیگه ای هم هست؟ :

چندریختی یعنی تابعی در کلاس پدر رو میشه در کلاس فرزند ، تغییر داد که میشه همون از یه تابع ، به چند شکل و ریخت استفاده کرد . با استفاده از کلمه virtual در کلاس پدر میشه به تابع این قابلیت رو اضافه کرد . با استفاده از کلمه override در کلاس فرزند ، میشه تابع پدر رو تغییر داد به دلخواه
یا به عبارتی تابع چند ریختی فقط توی کلاس پدر با کلمه ی virtual تعریف میشه . نه هیچ کلاس دیگه ای و تغییر این تابع فقط توی کلاس فرزند با کلمه ی override انجام میشه نه هیچ کلاس دیگه ای
در کلاس فرزند اگه بخوایم تابع چند ریختی رو تغییر بدیم ، چون به نوعی تابع مجدد تعریف باید بشه و تابع هم فقط در سطح (داخل) کلاس تعریف میشه ، پس برای تغییر تابع چند ریختی یا در واقع باید کلمه ی override را داخل و در سطح کلاس بنویسیم نه در داخل توابع یا متد دیگه و ... و بعدش هم هر جور خواستیم بدنه و خروجی شو تغییر میدیم
چون تابع چند ریختی باید از کلاس فرزند در دسترس باشه تا لود شه ، پس باید سطح دسترسی این نوع تابع در کلاس پدر که تعریف کردیم ، public باشه
برای فراخونی این تابع چند ریختی شده یعنی تغییر داده شده ، که داخل کلاس فرزند تعریف کردیم ، مثل حالت عادی ، با ایجاد شی از کلاس های دیگه ، در دسترسه

--------------

خسته میشین بخونین :Love-ssa~! (1):
نکته ی دیگه ای هست که فکر کنم باشه یا فقط همینه؟
سلام!

سجاد جان این توضیحاتی که فرمودی درسته و برای تکمیلش می تونی مطلب زیر رو هم مطالعه کنی:
Polymorphism in .NET - CodeProject (Only the registered members can see the link)

ولی چند ریختی فقط همین نیستش و مفاهیم abstract، delegate و operator رو هم در بر می گیره:
مفهوم چندریختی در زبان سی شارپ #C (Only the registered members can see the link)
C# - Polymorphism (Only the registered members can see the link)

در مورد Delegate هم این مطلب شاید مفید باشه:


Delegate راهي براي اجراي چندين تابع مختلف است كه ورودي مشابهي دارند. فرضا" اگر سه تابع داشته باشيم كه عمليات هاي رياضي مختلفي رو روي يك عدد مشابه اجرا مي كنند؛ به جاي اجراي تك تك اون سه تابع با ورودي يكسان، مي تونيم سه تابع رو در يك Delegate تعريف كنيم و سپس با يك بار دادن اون عدد به Delegate ايجاد شده، Delegate خودش عدد ورودي رو به سه تابع داخليش ميده و نتايج رو بر مي گردونه. حال اگر يكي از اين سه تابع به جاي يه ورودي به دو ورودي نياز داشته باشه ديگه نميشه از اين روش استفاده كرد. در اين جا به اصطلاح گفته ميشه Delegate Signature بين سه تابع مطابقت نداره (عدم تشابه در پارامتر هاي ورودي و يا مقادير برگشتي توابع). در مبحث چند ريسماني هم وقتي قصد داريم تابعي رو توسط يك Thread كه يك متد Delegate محسوب ميشه اجرا كنيم ممكنه با مشكل عدم تطابق Delegate Signature رو به رو بشيم.

در حالت كلي اگر قصد داشته باشيم تابعي رو توسط يك Thread مجزا اجرا كنيم و اون تابع داراي پارامتر ورودي باشه جهت هماهنگ كردن Delegate Signature، بايد از عبارت delegate قبل از معرفي تابع استفاده كنيم. در دستور شما هم تابع Sort چهار ورودي داره كه باعث ميشه از اين قاعده مستثني نباشه. لازم به ذكره در نسخه هاي جديد سي شارپ اين هماهنگي با استفاده از عبارت هاي لاندا (Lambda Expression) هم امكان پذيره.

SajjadKhati
07-03-16, 23:50
سلام!

سجاد جان این توضیحاتی که فرمودی درسته و برای تکمیلش می تونی مطلب زیر رو هم مطالعه کنی:
Polymorphism in .NET - CodeProject (Only the registered members can see the link)

ولی چند ریختی فقط همین نیستش و مفاهیم abstract، delegate و operator رو هم در بر می گیره:
مفهوم چندریختی در زبان سی شارپ #C (Only the registered members can see the link)
C# - Polymorphism (Only the registered members can see the link)

در مورد Delegate هم این مطلب شاید مفید باشه:

سلام
ممنون آقا آرمین :11():
من از یکی سئوال میپرسم که الان نیست که جواب بده.
زیادم هست سئوالاتم و نیاز هم دارم
همونطور که میدونی آقا آرمین توی سی شارپ مبتدی هستم و تا مبحث ارث بری رو و حالا نمیدونم کامل میدونم از این مبحث یا نه ولی الان توی مبحث چند ریختی گیر کردم
مبحث تعریف تابع virtual و تغییر بدنه اش با override رو انگار یه چیزایی متوجه شدم ولی در مبحث کلی چند ریختی و مخصوصا کلمه کلیدی new و new virtual بجای override گیر کردم
در کل اطلاعات تیکه پاره از چند جا درباره مبحث چند ریختی گرفتم که الان باعث گیج شدنم شد مخصوصا در کلمه کلیدی new و new virtual اش
این سئوالاتی که در زیر مطرح کردم رو از اون نفر پرسیدم که اگه وقت کنی جواب بدی اوستا آرمین (البته هر چه سریعتر بهتر:Love-ssa~! (1):) ممنون میشم :





ببخشید آقا علی کنجکاو شدم بدونم اون کد خط بالا چیه دقیقا؟
اگه سطح دسترسی public که اولش نوشتین رو برداریم میشه همون ساخت شی یعنی اگه این جوری باشه :



Class3 a = new Class3();


ولی تا جایی که میدونم موقع تعریف شی ، سطح دسترسی براش نمیزارن
چیه دقیقا این؟
--------------
بعد یه سئوال دیگه دارم اینکه داخل یک کلاس میشه کلاس دیگه ای تعریف کرد و بعد داخل اون متد و اعضاء تعریف کرد؟ (منظورم تعریف یک کلاس کنار کلاس دیگه نیست. منظورم داخل یک کلاس هست)
چجوری میشه تو کد زیر ، از کلاس داخلی شی درست کرد یا متد meth را فراخونی کرد؟ :



namespace MultiClassTest
{
class MyClass1
{
public class MyClass2
{
public string x = "1";
public string meth()
{
string y = "internal class";
return y;
}
}
}
}


فضای نام تو در تو رو فهمیدم که باید فضای نام ها را با استفاده از using و نوشتن نام فضای نام و بعد با گذاشتن نقطه و بعد نوشتن فضای نام داخلی ، ملحق کنیم
-------------------------------------


به این نکته توجه کنید که اگر کلاس B وارث کلاس A باشد و کلاس C وارث کلاس B باشد، C می تواند هر چیزی که

در A ویژگی virtual داشته را override کند، چه در B بازنویسی شده باشند و چه نشده باشند.

منظورتون اینه که اگه A کلاس پدربزرگ و B پدر و C فرزند باشه و مثلا متد Test در کلاس پدربزرگ یعنی کلاس A بصورت virtual تعریف شده باشه و بعد در کلاس B یه override از متد Test بسازیم و این متد رو هر جور دلمون خواست تغییر بدیم و بعد حالا میتونیم توی کلاس C متد Test در کلاس A یعنی کلاس پدربزرگ رو دوباره override کنیم؟!
ولی من اینو تست کردم دیدم وقتی میخوایم یه متد رو override کنیم ، فقط آخرین متدی که override کردیم در آخرین کلاس در دسترسمون هست و فقط اونو میتونیم تغییر بدیم و متدهای دیگه در کلاس های قبلی اش که override کردیم از دسترسمون خارج میشه یعنی وقتی در کلاس B که متد رو یه بار override کردیم (چون در کلاس A بصورت virtual تعریف کردیم) ، در دفعه ی بعد که میخوایم override تعریف کنیم یعنی وقتی در کلاس C بصورت override میخوایم بنویسیم ، فقط متد Test ای که در کلاس B (بصورت override) تعریف کردیم در دسترسمون هست و متد Test در کلاس A از دسترس مون خارج میشه



کلاس B می تواند Test کلاس A را نادیده بگیرد، مثلا می خواهد Test اش private باشد، دقت کنید که override ای در کار نیست،

عبارت new مشخص کننده نادیده گرفتن صریح Test کلاس A است :



public class B : A
{
private new void Test()
{
}
}



کلاس B می تواند Test جدید اش را طوری ارائه کند که فرزندانش بتوانند آنرا بازنویسی کنند، هم عبارت new و هم virtual بکار رفته.
فرزندان کلاس B ارتباط شان را با Test ئه کلاس A از دست می دهند، چون B از اساس Test جدیدی را virtual کرده :


public class B : A
{
public new virtual void Test()
{
}
}


البته موارد زیادی در این بحث چند ریختی هست، مخصوصا یکسری موارد خاص ویژوال استدیو هست، مثلا در بعضی از کلاس ها
بخشی از موارد رو override می کنند، نه به این جهت که باز نویسی شوند، صرفا به این جهت که از دید برنامه نویس مخفی شوند. در فروم از اینجور مثال ها هست.

من این تیکه ها رو متوجه نشدم
وقتی در کلاس پدربزرگ که متدم رو public و virtual تعریف کردم و بعد در کلاس پدر بصورت private new تعریف کردم ، از متد فرزند هم به متد مورد نظر در کلاس پدربزرگ دسترسی داشتم یعنی فرزندان ارتباط شون رو با متد در کلاس پدربزرگ از دست ندادن

------------------------------------------

یه سئوال دیگه اینکه وقتی توی کلاس پدر ، متدی با قابلیت virtual تعریف میکنم توی هیچ متدی از کلاس پسر با کلمه کلیدی this در دسترس نیست و فقط باید شی براش درست کنم تا در دسترس قرار بگیره . سطح دسترسی شم public هه
مگه کلمه کلیدی this هم کلاس خودی و هم کلاس های اجدادش رو اون عضوهایی که قابلیت دسترسی دارن (بجز public static) رو در دسترس مون قرار نمیده؟

SajjadKhati
22-03-16, 23:16
سلام
آقا نوع داده ای object چیه؟
تا حالا توضیحاتی که شنیدم و قبل از آشنایی با نوع داده ای var فکر میکردم که نوع داده ای object همون کار var را میکنه
ولی الان فهمیدم var همون چیز مورد نظرم بود یعنی اتوماتیک نوع متغییر را تشخیص میده و خیلی به درد عملیات ریاضی و جاهایی که انواع مختلف عددهای رند و غیر رند با هم بکار میره میخوره و کار آدمو راحت میکنه . نوع متغییر var هم موقع نوشتن کد مشخص میشه ولی object و dynamic انگار موقع اجرا برنامه مشخص میشن
پس نوع داده ای object به درد کجا میخوره؟
انگار نوع dynamic هم داریم. این باز چیه؟ Only the registered members can see the link چن تا!!! فرقشون با هم چی ان؟
--------------------
بعد اینکه فایل با پسوند mp3 رو نمیشه بدون ابزار windows media player توی #C پلی کرد؟
----------------------------------
یه سئوال دیگه
چرا وقتی یه کنترل (مثلا button) به پروژه اضافه میکنیم ، ویژال استودیو اتوماتیک با نام همون کنترل ، برامون از کلاس اش یه شی (instance) ایجاد میکنه و ما از اون به بعد فقط کافیه که اعضاشو مثل پروپرتی ها و متدها و متغییرها و ... برای استفاده و فراخونی نام ببریم (که مشخصه با نقطه جدا میشن) ولی برای فراخونی یک فرم جدید باید خودمون یه شی از کلاس اش ایجاد کنیم؟
چرا این فرق هست؟ همه مگه کنترل نیستن؟
--------------------------------------------------
سئوال دیگه اینکه چجوری میشه توی یک رویدادی کدی بنویسیم که وقتی اون رویداد اتفاق میافته ، اتوماتیک یه دکمه از کیبرد رو برامون فشار بده (نه اینکه کاربر خودش فشار بده) مثلا دکمه F1 یا دکمه Delete و ... رو؟
--------------------------------------------------این کلاس keys در رویدادهای کیبرد دقیقا چیه؟ من کد زیر رو وقتی در رویداد KeyDown (فرم) مینویسم ، هر دکمه ای رو میزنم بهم پیام E رو میده. چرا؟ :




string y = Convert.ToString(Keys.E);
MessageBox.Show(y);


مگه نباید فقط وقتی دکمه E را میزنم فقط عمل کنه؟
------------------------------------------------------
و اینکه من در کد زیر که توی رویداد KeyDown گذاشتم ، میخوام وقتی کلیدهای ترکیبی Ctrl+E رو زدم ، بهم پیام بده ولی نمیده . علت اشتباهم کجاست؟ :



private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control==true && e.KeyData==Keys.E)
{
MessageBox.Show(e.Control.ToString()+" + "+e.KeyData.ToString()+" pressed");
}


}

ravegoat
04-04-16, 09:14
سلام!

1- تفاوت Var با Object و Dynamic:
Difference between Object, Dynamic and Var - CodeProject (Only the registered members can see the link)
Only the registered members can see the link
Var vs Dynamic Keywords in C# (Only the registered members can see the link)

2-MP3 بدون Windows Media Player:
اگر منظورت اینه که کنترلر WMP در فرم معلوم نشه، بله امکان پذیره:
Only the registered members can see the link
اما اگر میخوای بدون استفاده از هیچ کتابخونه ای این کار رو بکنی، غیر ممکن نیست ولی سخته.

3-دکمه و فرم همه مگه کنترل نیستن؟
سجاد جان کلمه کلیدی this برای همین کار هستش! مثلا button1.Text برای دکمه معادلش برای فرم میشه this.Text (دیگه نیازی به ساخت شی نیستش).

4-فشرده شدن اتوماتیک یه دکمه از صفحه کلید:
با دستور SendKeys (Only the registered members can see the link spx) این کار امکان پذیره.

5-Keys در سی شارپ:
Keys در واقع یه Enum از دکمه های صفحه کلید هستش. در رویداد KeyDown اگر شما از شرط استفاده نکنی، هر کلیدی که پایین نگه داشته باشه رویداد رخ میده و مقدار کارکتر کلید E به نمایش در میاد.

6-فشردن کلید ترکیبی:
شرطت باید به این شکل اصلاح بشه:


if (e.KeyCode == Keys.E || e.KeyCode == Keys.Control)

SajjadKhati
20-01-17, 00:11
سلام
چرا عضو protected از یک کلاس ، فقط وقتی درون کلاس فرزند ، از همون کلاس فرزند شی بسازیم در دسترس هه؟ یعنی به چه دلیل وقتی از کلاس فرزند ، شی ای از کلاس پدر بسازیم ، اعضای protected تعریف شده از کلاس پدر در دسترس نیست؟

ravegoat
20-01-17, 07:32
سلام
چرا عضو protected از یک کلاس ، فقط وقتی درون کلاس فرزند ، از همون کلاس فرزند شی بسازیم در دسترس هه؟ یعنی به چه دلیل وقتی از کلاس فرزند ، شی ای از کلاس پدر بسازیم ، اعضای protected تعریف شده از کلاس پدر در دسترس نیست؟

سلام سجاد جان،

اعضای protected مطابق MSDN (Only the registered members can see the link) در کلاس پایه و هم در کلاس وارث در دسترس هستش.

SajjadKhati
20-01-17, 08:46
سلام سجاد جان،

اعضای protected مطابق MSDN (Only the registered members can see the link) در کلاس پایه و هم در کلاس وارث در دسترس هستش.

سلام
ممنون اوستا آرمین
اینو میدونم . سئوال مو دقیق تر بخونی ، متوجه سئوالم میشی :
به چه دلیل وقتی از درون کلاس فرزند ، شی ای از کلاس پدر بسازیم ، اعضای protected (غیر استاتیک) تعریف شده از کلاس پدر در دسترس نیست؟

SajjadKhati
21-01-17, 11:10
سلام
درباره ی نوع کلاس پدر و مقدار فرزند ، میخواستم ببینم تحلیلی که در زیر میکنم درست هست یا نه و اگه درست نیست ، ممنون میشم درست اش رو توضیح بدین (چون درک این مسئله برام توی کدنویسی مهم هست) .
در کد زیر :



FatherClass object = new ChildClass();



اشیاء هایی از نوع کلاس ، اشاره گری هستن به مقادیرشون (سمت راست) پس در کد بالا ، object اشاره گری هست به کلاس ChildClass . پس یعنی شی object ، به اعضای اونجایی رو که اشاره میکنه یعنی به اعضای کلاس ChildClass ، دسترسی داره منتها فقط به اعضایی از کلاس فرزند دسترسی داره که در کلاس پدر موجود باشه (تعریف شده باشه)
پس شی object به اعضای جدیدی که در کلاس فرزند تعریف شده ، دسترسی نداره
اگه متدی override شده باشه ، چون اعضای کلاس فرزند رو میبینه و override هم باعث باطل شدن متد در کلاس پدر میشه ، پس عضو override شده در کلاس فرزند اجرا میشه نه عضو virtual در کلاس فرزند
ولی با این تفاسیر ، نمیدونم چرا در شی object ، اگه member hiding اتفاق بیفته ، بجای اجرای عضو مخفی شده در کلاس فرزند ، عضو اصلی در کلاس پدر رو اجرا میکنه ؟؟!!

----------------------------------

یا اینکه این تحلیل درسته؟ (اما فکر کنم تحلیل بالا درست باشه) :
اینکه شی object در کد بالا ، اعضای پدر رو اجرا میکنه بجز حالت override رو که در کلاس پدر اجرا میکنه

کدوم درست هه؟ و اگه اولی درسته ، ممنون میشم جواب سئوال مو بدین و اگه حس میکنین نکته ای رو نمیدونم ، ممنون میشم بگین

ravegoat
22-01-17, 08:25
سلام
درباره ی نوع کلاس پدر و مقدار فرزند ، میخواستم ببینم تحلیلی که در زیر میکنم درست هست یا نه و اگه درست نیست ، ممنون میشم درست اش رو توضیح بدین (چون درک این مسئله برام توی کدنویسی مهم هست) .
در کد زیر :



FatherClass object = new ChildClass();



اشیاء هایی از نوع کلاس ، اشاره گری هستن به مقادیرشون (سمت راست) پس در کد بالا ، object اشاره گری هست به کلاس ChildClass . پس یعنی شی object ، به اعضای اونجایی رو که اشاره میکنه یعنی به اعضای کلاس ChildClass ، دسترسی داره منتها فقط به اعضایی از کلاس فرزند دسترسی داره که در کلاس پدر موجود باشه (تعریف شده باشه)
پس شی object به اعضای جدیدی که در کلاس فرزند تعریف شده ، دسترسی نداره
اگه متدی override شده باشه ، چون اعضای کلاس فرزند رو میبینه و override هم باعث باطل شدن متد در کلاس پدر میشه ، پس عضو override شده در کلاس فرزند اجرا میشه نه عضو virtual در کلاس فرزند
ولی با این تفاسیر ، نمیدونم چرا در شی object ، اگه member hiding اتفاق بیفته ، بجای اجرای عضو مخفی شده در کلاس فرزند ، عضو اصلی در کلاس پدر رو اجرا میکنه ؟؟!!

----------------------------------

یا اینکه این تحلیل درسته؟ (اما فکر کنم تحلیل بالا درست باشه) :
اینکه شی object در کد بالا ، اعضای پدر رو اجرا میکنه بجز حالت override رو که در کلاس پدر اجرا میکنه

کدوم درست هه؟ و اگه اولی درسته ، ممنون میشم جواب سئوال مو بدین و اگه حس میکنین نکته ای رو نمیدونم ، ممنون میشم بگین
سلام،

خیر، این تحلیل درست نیست. اشاره گری زمانی صحیح بود که اپراتور new در تعریف وجود نداشت. از آن رو که در سی شارپ (بر خلاف جاوا) توابع به طور پیش فرض از نوع non-virtual هستن، به هنگام تعریف فوق تنها توابعی مشمول چند ریختی میشن که override شده باشند. در غیر این صورت به دلیل explicitly در سی شارپ توابع مخفی شده از Type آن شی برداشت میشه؛ Type شی هم FatherClass هستش و نه ChildClass.

اطلاعات بیش تر:
.net - Using the 'new' modifier in C# - Stack Overflow (Only the registered members can see the link)
Polymorphism, Method Hiding and Overriding in C# (Only the registered members can see the link)

SajjadKhati
19-02-17, 17:02
سلام
میخوام با زبان Lua ، یه آرایه ای رو به dll سی شارپ که خروجی Unmanaged Export داره رو بفرستم . لوا نمیتونه بصورت مستقیم ، برای سی شارپ آرایه ارسال کنه
نمیدونم ساختار آرایه در لوا چجوری هه ولی چون لوا با زبان C نوشته شد و از طرفی هم فقط میتونه با خروجی هایی از نوع Unmanaged Export با سی شارپ ، ارتباط برقرار کنه ، برای همین حدس میزنم به احتمال زیاد ساختار زبانش باید Unmanaged باشه

حالا مشکل اینجاست که من اشاره گر به آرایه ای که در لوا ساختم رو برای سی شارپ میفرستم (با استفاده از خود همون اشاره گر ، در لوا میتونم اعضای آرایه رو بخونم) و آدرس اشاره گر هم به درستی به سی شارپ فرستاده میشه اما وقتی میخوام اطلاعات اون اشاره گر به آرایه رو در سی شارپ بخونم ، اطلاعات همون آرایه نیست و یه اطلاعات پرت و پلای دیگه هست .

باید چی کار کنم؟
کدی که برای قضیه ی بالا تست کردم و اطلاعات غلط رو میخونه ، اینه :

در Lua (که فقط اشاره گر به آرایه و تعداد اعضای آرایه رو برای سی شارپ میفرسته . کار خاصی نمیکنه) :










myArray = {164, 10, 41, 57, 2500, 1};










tableSize = MemoryEx.TableRequiredSize(myArray);


handleMyArray = MemoryEx.AllocateEx(tableSize);


handleMyArray:SetArrayType(MEMEX_ARR_INT); --say konid ghabl az meghdar dadn ba tabeh MemoryEx.Table , data type ro moshakhas konid


myArrayPointer = handleMyArray:GetPointer();


isCreatedInBuffer = MemoryEx.Table(myArrayPointer, myArray);


if (isCreatedInBuffer == true and myArrayPointer ~= nil) then


myArrayInBuffer = MemoryEx.Table(myArrayPointer);


if (myArrayInBuffer ~= nil) then


dllPath = _SourceFolder.."\\ClassLibrary2.dll";


dllHdl = Library.Load(dllPath);


if (dllHdl ~= nil) then


---------------------


firstElementInDll = dllHdl.ArrayPointer8(myArrayPointer, #myArrayInBuffer) (Only the registered members can see the link)


dllHdl:Close_();


end


end





و کدهای سی شارپ :










[DllExport("ArrayPointer8", CallingConvention.StdCall)]


public static unsafe void ArrayPointer8(int arrayPtr, int arrayLength)


{


int* mainPointer = (int*)arrayPtr;


for (int i = 0; i < arrayLength; i++)


{


MessageBox.Show(mainPointer[i].ToString(), "In C#‎") (Only the registered members can see the link)


mainPointer[i] = i;


}










-----------------------
بقیه ی کدهای سی شارپی که ازش نتیجه نگرفتم (کلاس Marshal) :







[DllExport("ArrayPointer4", CallingConvention.StdCall)]


public static int ArrayPointer4(int arrayPtr, int arrayLength)


{


try


{


IntPtr realArrayptr = (IntPtr)arrayPtr;


int[] arrayInC = new int[arrayLength];


Marshal.Copy(realArrayptr, arrayInC, 0, arrayLength);


MessageBox.Show(arrayInC[0].ToString(), "in C#‎") (Only the registered members can see the link)










return arrayInC[0];


}


catch (Exception)


{


return 0;


}


}




باید چی کار کنم؟
ممنون

- - - Updated - - -

سلام
من میخوام در نرم افزار autoplay media studio ، فرم ایجاد شده در این نرم افزار رو توسط dll ای که در سی شارپ مینویسم ، با این فرم کار کنم (مثلا تغییر اندازه بدم)
اما این نرم افزار و زبان Lua اش ، زبان غیر دات نت هست و همونطور که میدونیم ، بصورت عادی نمیشه با فرم هایی که در زبان غیر دات نت بودجود میان ، در زبان سی شارپ با اون فرم ها کار کنیم . متد Control.FromHandle در سی شارپ هم فقط هندل فرم های دات نت رو به شی مورد نظر تبدیل میکنه
حالا روش و راهی وجود داره که در سی شارپ ، وقتی هندل فرم های غیر دات نت رو میفرستیم براش ، با این فرم ها کار کنیم؟ مثلا هندل فرم غیر دات نت رو بگیره و تغییر اندازه بده اون فرم رو؟

ravegoat
20-02-17, 07:15
سلام
من میخوام در نرم افزار autoplay media studio ، فرم ایجاد شده در این نرم افزار رو توسط dll ای که در سی شارپ مینویسم ، با این فرم کار کنم (مثلا تغییر اندازه بدم)
اما این نرم افزار و زبان Lua اش ، زبان غیر دات نت هست و همونطور که میدونیم ، بصورت عادی نمیشه با فرم هایی که در زبان غیر دات نت بودجود میان ، در زبان سی شارپ با اون فرم ها کار کنیم . متد Control.FromHandle در سی شارپ هم فقط هندل فرم های دات نت رو به شی مورد نظر تبدیل میکنه
حالا روش و راهی وجود داره که در سی شارپ ، وقتی هندل فرم های غیر دات نت رو میفرستیم براش ، با این فرم ها کار کنیم؟ مثلا هندل فرم غیر دات نت رو بگیره و تغییر اندازه بده اون فرم رو؟
سلام سجاد جان،

اگر سوالت رو درست متوجه شده باشم، همان طور که خودت اشاره کردی سی شارپ به طور مستقیم نمی تونه چنین کاری کنه. ولی می تونی با به کار گیری متد های موجود در user32.dll ویندوز مطابق پیوند های زیر این کار رو انجام بدی:
c# - How do I change another program&#39;s window&#39;s size? - Stack Overflow (Only the registered members can see the link)
Resize other window or application c# - Stack Overflow (Only the registered members can see the link)

SajjadKhati
20-02-17, 10:27
سلام سجاد جان،

اگر سوالت رو درست متوجه شده باشم، همان طور که خودت اشاره کردی سی شارپ به طور مستقیم نمی تونه چنین کاری کنه. ولی می تونی با به کار گیری متد های موجود در user32.dll ویندوز مطابق پیوند های زیر این کار رو انجام بدی:
c# - How do I change another program& (Only the registered members can see the link)#39 (Only the registered members can see the link)s window&#39 (Only the registered members can see the link)s size? - Stack Overflow
Resize other window or application c# - Stack Overflow (Only the registered members can see the link)

سلام
ممنون استاد آرمین
من استفاده از منظورم API های ویندوز نیست . API هم سخت تر هه و هم در هر زبانی میشه ازش استفاده کرد . من منظورم اینه که روشی نیست که هندل ویندوزهای دیگه رو یه جوری تبدیل به هندل ویندوزهای قابل استفاده در زبان های دات نت و Managed Code ها کرد که بعدش با استفاده از متد Control.FromHandle اونو تبدیل به فرم و کلا کلاس کنترل مورد نظر کرد و بعد با اون کلاس کنترل ، بشه ازش استفاده کرد؟
تحقیقات اولیه ام نشون میده در وهله ی اول انگار این کار نشدنی هست . ای کاش مایکروسافت ، یه چاره ای برای این نوع تبدیل میکرد

SajjadKhati
20-02-17, 21:31
سلام
اوستا آرمین ، کلاس یا کلاس هایی وجود دارن که خودشون از توابع API استفاده کنن تا دست ما رو برای کار با ویندوزهای دیگه در سی شارپ باز بذارن؟ اگه آره ، اسم شون چیه؟

ravegoat
01-03-17, 07:46
سلام
اوستا آرمین ، کلاس یا کلاس هایی وجود دارن که خودشون از توابع API استفاده کنن تا دست ما رو برای کار با ویندوزهای دیگه در سی شارپ باز بذارن؟ اگه آره ، اسم شون چیه؟
سجاد جان منظورت کدوم API هستش و اینکه دستت رو باز بذارن دقیقا چه تعبیری داره؟

SajjadKhati
01-03-17, 11:30
سجاد جان منظورت کدوم API هستش و اینکه دستت رو باز بذارن دقیقا چه تعبیری داره؟

سلام
ممنون استاد آرمین
منظورم یه چیزی مثل ManagedWinApi هست :
Managed Windows API (Only the registered members can see the link)

البته این هم قوی هست ولی قویتر از این (که مثل این هم راهنما داشته باشه) ، وجود داره؟

ravegoat
02-03-17, 08:33
سلام
ممنون استاد آرمین
منظورم یه چیزی مثل ManagedWinApi هست :
Managed Windows API (Only the registered members can see the link)

البته این هم قوی هست ولی قویتر از این (که مثل این هم راهنما داشته باشه) ، وجود داره؟

سلام مجدد سجاد جان؛

خواهش می کنم، استاد شمایی...

این کتابخونه ای که شما گذاشتی در اصل از Windows API استفاده می کنه. اگر بخوام بهتر بگم تمامی کتابخونه های دات نتی و حتی خود dotNET Framework هم در پایین ترین سطح یک تابع ویندوزی رو برای تغییر سایز یک پنجره صدا می زنن. به دلیل ماهیت ویندوز به هیچ عنوان راه گریزی از Platform Invoke توابع ویندوزی هنگام کار با ویژگی های ویندوز نیست. اگر شما بخوای کد Native هم با سی پلاس پلاس بنویسی که سایز پنجره رو تغییر بده، بازم مجبوری از WAPI استفاده کنی.
با توجه به توضیح بالا در جواب پست 27 شما باید عرض کنم که Handler سی شارپی هم در نهایت به یک Handler در Windows API تبدیل میشه. در نهایت شما هر چیزی پیدا کنی که بخواد با ویژگی های ویندوز کار کنه، انتهای قضیه داره از کتابخونه های Unmanaged ویندوزی استفاده می کنه.

SajjadKhati
02-03-17, 08:43
سلام مجدد سجاد جان؛

خواهش می کنم، استاد شمایی...

این کتابخونه ای که شما گذاشتی در اصل از Windows API استفاده می کنه. اگر بخوام بهتر بگم تمامی کتابخونه های دات نتی و حتی خود dotNET Framework هم در پایین ترین سطح یک تابع ویندوزی رو برای تغییر سایز یک پنجره صدا می زنن. به دلیل ماهیت ویندوز به هیچ عنوان راه گریزی از Platform Invoke توابع ویندوزی هنگام کار با ویژگی های ویندوز نیست. اگر شما بخوای کد Native هم با سی پلاس پلاس بنویسی که سایز پنجره رو تغییر بده، بازم مجبوری از WAPI استفاده کنی.
با توجه به توضیح بالا در جواب پست 27 شما باید عرض کنم که Handler سی شارپی هم در نهایت به یک Handler در Windows API تبدیل میشه. در نهایت شما هر چیزی پیدا کنی که بخواد با ویژگی های ویندوز کار کنه، انتهای قضیه داره از کتابخونه های Unmanaged ویندوزی استفاده می کنه.

سلام
ممنون استاد آرمین
منظورم اینه که یه dll یا کلاسی وجود نداره که از dll ئه ManagedWinApi بهتر باشه ؟ (برای کار با توابع API تا خودمون مجبور نباشیم مستقیما از توابع api کار و فراخونی کنیم)

ravegoat
02-03-17, 09:07
سلام
ممنون استاد آرمین
منظورم اینه که یه dll یا کلاسی وجود نداره که از dll ئه ManagedWinApi بهتر باشه ؟ (برای کار با توابع API تا خودمون مجبور نباشیم مستقیما از توابع api کار و فراخونی کنیم)
بهترین کار همون PInvoke (Only the registered members can see the link) کردن توابع ویندوزی با DLL Import سی شارپ هستش. چون هر چی تعداد واسطه ها تا Windows API رو کم تر کنی، عملکرد بهینه تری خواهی داشت. ولی اگه منظورت از بهتر بودن راحتی در استفاده است (البته امیدوارم این طور نباشه) می تونی یه نگاهی به EasyHook (Only the registered members can see the link) بندازی.:1. (35):

SajjadKhati
02-03-17, 13:49
بهترین کار همون PInvoke (Only the registered members can see the link) کردن توابع ویندوزی با DLL Import سی شارپ هستش. چون هر چی تعداد واسطه ها تا Windows API رو کم تر کنی، عملکرد بهینه تری خواهی داشت. ولی اگه منظورت از بهتر بودن راحتی در استفاده است (البته امیدوارم این طور نباشه) می تونی یه نگاهی به EasyHook (Only the registered members can see the link) بندازی.:1. (35):


ممنون آقا آرمین
چرا این طور نباشه؟ اتفاقا همین طوره :Love-ssa~! (1):
الان لینک دانلود این easyhook اینه؟ :
EasyHook - EasyHook - download (Only the registered members can see the link)

و اگه آره ، دنیایی توش dll هه . کدوم dll رو باید reference کرد توی سی شارپ؟ مقصدم استفاده در نرم افزار 32 بیت هست . باید فایلی بنام EasyLoad32.dll رو reference کنم؟

SajjadKhati
24-04-17, 01:03
سلام
استاد آرمین ، میشه بجز کلیک راست و انتخاب گزینه chose item در toolbar و رفتن به سربرگ com ، روش دیگه ای برای اضافه کردن یه کمپوننت هست؟ چون با این روش نمیشه کمپوننتی رو درپروژه ی dll اضافه و یک dll ساخت!

ravegoat
30-04-17, 06:52
سلام
استاد آرمین ، میشه بجز کلیک راست و انتخاب گزینه chose item در toolbar و رفتن به سربرگ com ، روش دیگه ای برای اضافه کردن یه کمپوننت هست؟ چون با این روش نمیشه کمپوننتی رو درپروژه ی dll اضافه و یک dll ساخت!
سلام سجاد جان،

اگر بخوای از توابع موجود در اون کامپوننت استفاده کنی و خود کامپوننت هم در قالب DLL باشه می تونی با روش زیر کامپوننت رو به عنوان Reference اضافه کنی:
Only the registered members can see the link

ولی اگر میخوای کل کامپوننت رو در اختیار داشته باشی (البته اگر پروژه شو داری نه DLL شو) شاید راه زیر کارآمد باشه:
c# - Add a Web User Control to a Class Library Project in Visual Studio 2013 - Stack Overflow (Only the registered members can see the link)

SajjadKhati
07-06-17, 22:11
سلام
ممنون
آقا آرمین ، در کد زیر :



int a = 5;
a = 10;


وقتی خط دوم اجرا میشه ، مقدار حافظه ی خونه ی قبلی a که 5 بود ، اوررایت میشه دیگه؟ یعنی (کلا استراکچرها وقتی new میشن) حافظه ی جدیدی که براش در نظر گرفته نمیشه در اجرای خط دوم؟ (برخلاف مقدار جدید دادن به یه کلاس که حافظه ی جدیدی گرفته میشه)