الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

دروس في لغة ال C#

مغلق
بدأه إسماعيل عنجريني في 21 ديسمبر 2003 · 18 رد · 4,048 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته:

إخواني إن سمحتم لي سوف أبدأ بوضع دروس تتعلق بمواضيع مختلفة ومهمة بلغة الـ C# علماً أنني حصلت على هذه الدروس من المنتدى لكنها مكتوبة بلغة الـ VB.NET وأردت إعادة صياغتها بلغة الـ C# لتكون الفائدة مزدوجة.

أرجو من كل عضو أن يبدي رأيه وأن يصحح لنا الأخطاء بدون تردد لأن الهدف هو التعلم والتعلم يأتي نتيجة ارتكاب الأخطاء ومن ثم تصحيحها, والله الموفق.

وسوف يكون الدرس الأول عن التعامل مع الصورة بشكل بسيط.

بعض العمليات على الصورة

سوف نقوم بكتابة برنامج يقوم بتحميل صورة ما وإجراء بعض العمليات عليها:

1. من أجل تحميل الصورة استخدم OpenDilaogFile

if (dlgFile.ShowDialog == DialogResult.OK)

{

imgBox.Image.FromFile(dlgFile.FileName);

}

2. من أجل تصغير الصورة نستخدم التابع GetThumbnailImage الذي يأخذ أربعة متحولات هي

عرض الصورة الجديد – ارتفاع الصورة الجديد – قيمة نستطيع وضعها null – القيمة IntPtr.Zero.

imgBox.Image = imgBox.Image.GetThumbnailImage(NewWidth, NewHight,

null, IntPtr.Zero);

imgBox.Image.Save("c:\\MyImage.jpg")

imgBox.Update();

الكود السابق يقوم بتصغير \ تكبير الصورة ويحفظها على ملف في السواقة C ومن ثم يقوم بعملية Refresh لصندوق الصورة ليتم عرض الصورة الجديدة بعد تغيير حجمها.

3. تدوير الصورة

Image MyImg = imgBox.Image;

MyImg.RotateFlip(RotateFlipType.Rotate270FlipXY);

imgBox.Image = MyImg;

الكود السابق يقوم بتدوير الصورة بمقدار 270 درجة, وقد استخدمنا من أجل ذلك التابع RotateFlip الذي له وسيط واحد من النمط التعدادي RotateFlipType الذي يحتوي على عدد من القيم الجاهزة من أجل تدوير الصورة.

4. تغيير Format الصورة أي طريقة تمثيل هذه الصورة

imgBox.Image.Save("c:\\mine.bmp", ImageFormat.Bmp);

الكود السابق يحفظ الصورة ذات الامتداد jpg بصورة امتدادها bmp, وذلك باستخدام التابع save الذي يأخذ مسار الصورة, و Format الصورة الجديد.

ملاحظات:

1. imgBox هو عبارة عن PictureBox يتم الحصول عليه من شريط الأدوات.

2. الكود الكامل للبرنامج مُرفق كملف zip.

3. البرنامج مكتوب باستخدام Visual Studio.Net النسخة الأولى, ولكنه يعمل أيضاً على النسخة الثانية من البرنامج.

4. أرجو أن لا يتردد أي شخص في طرح أي سؤال سواءً كان يتعلق بالدرس أو بلغة C# بشكل عام.

ImageProcessing.zip

تم تعديل هذه المشاركة بواسطة ismaeel في 21 ديسمبر 2003 في 08:12

#2

ربنا معاك واساءل الله ان تكون نافعة للجميع . ونحن معك ان شاء الله

#3

جهد موفق يا اخى تشكر عليه

ونحن فى حاجة الى المزيد

والى الامام دائما

ويا ريت تستخدم وسوم الكود لالعطاءمنظر افضل لعرض الصفحة

اكتب الاكواد بين

 ......

وفقك الله

#4

السلام عليكم ورحمة الله وبركاته:

بقد ذكرت في الدرس الأول بأن الدروس سوف تكون عن مواضيع مختلفة, لذلك اليوم سوف نتعلم كيف نجعل ألوان الـ Form متدرجة.

using System.Drawing.Drawin2D;

LinearGradientBrush b;
b = new LinearGradientBrush(new Point(0, 0), new Point(this.Width, this.Height),
Color.Blue, Color.Yellow);
Graphics g = this.CreateGraphics();
g.FillRectangle(b, 0, 0, this.Width, this.Height);

طريقة أخرى:

LinearGradientBrush b;
b = new LinearGradientBrush(ClientRectangle, Color.Gold, Color.Aqua, 33.6f, false);
Graphics g = this.CreateGraphics();
g.FillRectangle(b, 0, 0, this.Width, this.Height);

نلاحظ أن الذي تغير هو فقط وسطاء التابع LinearGradiantBrush .

ملاحظة : الحرف f في القيمة 33.6 تعني أن هذه القيمة float لأن الوسيط هنا يمثل زاوية قيمتها تُعطى بالـ float.

طريقة أخرى:

LinearGradientBrush b;
RectangleF rectf = new RectangleF(new PointF(22.8f, 50), new SizeF(this.Width, this.Height));
b = new LinearGradientBrush(rectf, Color.Gold, Color.Aqua, 44.6f, true);
Graphics g = this.CreateGraphics();
g.FillRectangle(b, 0, 0, this.Width, this.Height);

أيضاً الذي اختلف هنا هي وسطاء التابع LinearGradiantBrush.

الحرف F في RectangleF تعني أن أبعاد هذا المستطيل يمكن أن تكون ذات فاصلة, وكذلك الأمر بالنسبة لـ PointF و SizeF.

يوجد بالإضافة للطرق الثلاثة السابقة خمس طرق أخرى أيضاً تختلف بوسطاء التابع نفسه.

تحويل النص إلى صورة:

Graphics g = imgBox.CreateGraphics();
g.DrawString("Hello Ismaeel", new Font("verdana", 12), Brushes.DarkRed,  imgBox.ClientRectangle);

بعد أن كتبنا النص على الـ PictureBox نستطيع أن نحفظ الصورة بالتنسيق الذي نريد لنحصل على صورة مكتوب عليها Hello Ismaeel, ونستطيع معاملتها كأي صورة عادية.

‏الاثنين‏، 22‏ كانون الاول‏، 2003

GradianForm.zip

تم تعديل هذه المشاركة بواسطة ismaeel في 22 ديسمبر 2003 في 04:15

#5

السلام عليكم ورحمة الله وبركاته:

كيف تنسخ صورة, نص إلى الذاكرة من برنامج من أجل استعماله في برنامج آخر أي كيف تنفذ الأمر Ctrl+C :

Clipboard.SetDataObject(imgBox.Image, true);

من أجل ذلك نستخدم التابع SetDataObject التابع للصف Clipboard, ويأخذ وسيطين, الأول هو الـ Data التي تريد نسخها إلى الذاكرة ( صورة, نص ) والوسيط الثاني عبارة عن متحول منطقي يأخذ القيمة true إذا أردنا أن تبقى البيانات التي نسخناها في الذاكرة بعد إغلاق البرنامج.

عند تجربة البرنامج المرفق نفذ الأمر copy على صورة ثم اذهب إلى الرسام ونفذ عملية اللصق عندها ستلاحظ أن الصورة ظهرت في الرسام.

أما إذا أردنا أن نحصل على بيانات موجودة في الذاكرة :

if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Bitmap) == true)
{
Bitmap b = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap);
imgBox.Image = b;
}
else
{
	MessageBox.Show("This data dosn't contains Bitmap");
}

نلاحظ أننا نفحص نوع الـ Data الموجودة في الذاكرة حتى نستطيع إجراء التحويل المناسب لها.

كمثال : اذهب إلى الرسام وافتح صورة من نوع Bitmap وقم بنسخها إلى الذاكرة ومن ثم شغل البرنامج ونفذ الأمر Past من القائمة Edit .

آسف لأن الدرس قصير لكن أعدكم أن يكون الدرس القادم أكثر إفادة.

ThirdLesson.zip

تم تعديل هذه المشاركة بواسطة ismaeel في 23 ديسمبر 2003 في 04:24

#6
التعامل مع الملفات
إنشاء مجلد:
[CODE]Directory.CreateDirectory("C:\\MyDir");

التعليمة السابقة تُنشئ مجلد على السواقة C.

الحصول على وقت آخر مرة تم فيها فتح المجلد:

DateTime d = Directory.GetLastAccessTime("C:\\MyDir");

معرفة تاريخ إنشاء المجلد:

DateTime d = Directory.GetCreationTime("C:\\MyDir");

إنشاء ملف:

StreamWriter sw = new StreamWriter("C:\\MyDir\\MyFile.txt");
 	 sw.WriteLine("Hello Ismaeel");
 	 sw.Close();

التابع WriteLine له إمكانيات قوية جداً .

تحديد خصائص الملف:

File.SetAttributes("C:\\MyDir\\MyFile.txt", FileAttributes.ReadOnly);

التعليمة السابقة تجعل الملف للقراءة فقط.

من أجل حذف ملف:

File.Delete("C:\\MyDir\\MyFile.txt");

من أجل نسخ ملف:

File.Copy("C:\\MyDir\\MyFile.txt", "C:\\MyFile.txt");

حساب طول الملف بالبايتات:

FileInfo f = new FileInfo("C:\\MyDir\\MyFile.txt");
MessageBox.Show(f.Length.ToString());

الحصول على امتداد الملف:

MessageBox.Show(Path.GetExtension("C:\\MyDir\\MyFile.txt"));

الحصول على اسم الملف مع الامتداد:

الحصول على اسم الملف بدون الامتداد:

MessageBox.Show(Path.GetFileNameWithoutExtension("C:\\MyDir\\MyFile.txt"));

File_Manager.zip

#7

لن تتعلم إذا لم تسأل, واسأل قبل أن تُسأل.

هذه بعض التعليمات البسيطة بلغة C# أرجو أن تكون مفيدة.

كيف تستخدم إمكانيات برنامج الـ Excel في برنامجك:

أنشئ مشروعاً جديداً:

File  New  Project  Visual C# Projects  Widows Application

وأعطه الاسم الذي تختاره أنت.

في النافذة Solution Explorer انقر فوق References بزر الفأرة الأيمن واختر الأمر Add Reference, انقر فوق علامة التبويب COM واختر Microsoft Excel 10.0 Object Library, ثم انقر الزر select وبعدها اضغط OK.

أضف إلى الـ Form العنصر TextBox وأعطه الاسم MathString.

أضف إلى الـ Form زر جديد وفي حدث النقر التابع للزر أضف الكود التالي:

Excel.Application exl = new Excel.Application();
string s;
s =  MathString.Text.Trim();
MessageBox.Show(exl.Evaluate((string)s).ToString());

هذا البرنامج يحسب العمليات الحسابية المعقدة, مثلاً:

cos(56.7/4) / exp(-4.269)

طبعاً قد يتساءل البعض ماذا يفيد هذا الأمر, فأقول أننا نستطيع استخدام التوابع الإحصائية مثلاً الموجودة في برنامج الـ Excel, وهذا المثال ما هو إلا بداية الطريق لكي تعرف بوجود هذه الإمكانية في لغة الـ C# وكل منا يستفيد من هذه الإمكانية حسب الحاجة.

كيف تحصل على اسم نظام التشغيل ورقم الإصدار:

MessageBox.Show(Environment.OSVersion.ToString());

من كم دقيقة هذا الجهاز يعمل ؟

int minut;
minut = Environment.TickCount / 60000;
MessageBox.Show("هذا الجهاز يعمل منذ " + minut.ToString() + " دقيقة");

هل تعرف اسم جهازك؟؟؟

MessageBox.Show(Environment.MachineName + " هذا الجهاز اسمه  ");

في النهاية أقول لكم ASP.NET With C# is the best.

#8

السلام عليكم ورحمة الله وبركاته:

اليوم سوف نتعلم كيف نتعامل مع الـ Registry:

أولاً يجب كتابة: using Microsoft.Win32;

إنشاء مفتاح جديد من أجل تخزين قيمة ما:

RegistryKey key = Registry.LocalMachine.OpenSubKey("software", true);
RegistryKey subkey = key.CreateSubKey("arab");
subkey.SetValue("name", "Hello ArabTeam2000");
subkey.Flush();
key.Close();

الكود السابق يقوم بإنشاء مفتاح فرعي ضمن المسار :

HKEY_LOCAL_MACHINE/SOFTWARE/ARAB

ثم يكتب القيمة name في المفتاح الرئيسي arab ويكتب فيها القيمة Hello ArabTeam2000.

قراءة قيمة موجودة في الـ Registry.

اقتباس
RegistryKey key = Registry.LocalMachine.OpenSubKey("software", true);

RegistryKey subkey = key.OpenSubKey("arab");

MathString.Text = subkey.GetValue("name").ToString();

key.Close();

subkey.Close();

الكود السابق يقرأ القيمة Hello ArabTeam2000 ويُظهرها في الـ textbox.

حذف مفتاح فرعي:

RegistryKey key = Registry.LocalMachine.OpenSubKey("software", true);
key.DeleteSubKey("arab");
key.Close();

الكود السابق يحذف المفتاح الفرعي arab.

حذف قيمة موجودة ضمن مفتاح فرعي:

RegistryKey key = Registry.LocalMachine.OpenSubKey("software", true);
RegistryKey subkey = key.OpenSubKey("arab", true);
subkey.DeleteValue("name");
subkey.Close();
key.Close();

الكود السابق يحذف القيمة name من المفتاح الفرعي arab.

لاحظ أنن عندما فتحنا المفتاح مررنا القيمة true من أجل إمكانية الحذف.

Office.zip

تم تعديل هذه المشاركة بواسطة ismaeel في 28 ديسمبر 2003 في 04:02

#9

السلام عليكم ورحمة الله وبركاته:

إذا أردت أن تعرف أسماء السواقات الموجودة في جهازك عن طريق برنامج تعمله أنت , فاتبع الخطوات :-

System.Collections.IEnumerator en;
string [] drv;
drv = System.IO.Directory.GetLogicalDrives();
en = drv.GetEnumerator();
while (en.MoveNext())
{
	lbDrivers.Items.Add((string)en.Current);
}

من أجل معرفة عرض وارتفاع شاشة الحاسب:

MessageBox.Show(SystemInformation.PrimaryMonitorSize.Width.ToString());

MessageBox.Show(SystemInformation.PrimaryMonitorSize.Height.ToString());

تشغيل برنامجك في بداية الإقلاع:

إذا أردت برنامجك يعمل عند بداية تشغيل الويندوز Start up فعليك كتابة الكود الآتي:

string sfolder;
string currDir;
sfolder = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
currDir = Environment.CurrentDirectory;
System.IO.File.Copy(currDir + "\\Drivers.exe", sfolder + "\\d.exe", true);

السطر الأول يعطيك مسار مجلد بدء التشغيل .

السطر الثاني يعطيك مسار مجلد برنامجك .

السطر الثالث يقوم بنسخ برنامجك من مجلده الأصلي إلى مجلد بدء التشغيل .

لاحظ أن يجب عليك استخدام "\\" لكي تنسخ ملف معين موجود في مجلد .

Drivers.zip

#10

اقدم لك خاص الشكر و العرفان

#11

اخونا اسماعيل قد شرحت فيما سبق GetLogicalDrives

اريد ان اعرف هل من الممكن ان ناتي physical Drives فقط

#13

مجهود جبار

شكرا لك

#14

الله يعينك اخى...ismaeel

فانت ماشاء الله نشيط جدا بارك الله فيك

وارجو الاستمرار

اخيكم

............ حسن نصار

post-57-1085098727_thumb.jpg

#15

السلام عليكم

مشكور كثير اخي على هذا المجهود

وهذا موقع لمجموعة من الكتب و من ضمنها كتب عن c#

و هي كتب عن ألforms & network programmin

و الموقع هو ftp.runnet.ru

و اتمنى لك التقدم مع هذه اللغة الرائعة جدا

#16

جزاك الله خيرا اخي اسماعيل وجعلك ذخرا للاسلام والمسلمين

ونرجوا منك الاستمرار وعمل مثال متكامل عن قواعد البيانات وادخال compobox بداخلها

واكواد للبحث والفلترة

وجزاك الله خيرا على مجهودك الرائع

#17

شكراً لكم, على فكرة هذه الدروس مضى عليها وقت طويل لكن وبما أن الإخوة عادوا للتفاعل فسوف أعود لوضع الدروس مرة أخرى إن شاء الله وانتظروا مواضيع مفيدة

#18

السلام عليكم ورحمة الله وبركاته:

هذا الدرس سوف يشرح كيف نعرف نوع سواقة ما موجودة على الجهاز:

1 - من أجل معرفة نوع السواقة يجب استخدام التابع GetDriveType الذي يأخذ اسم السواقة ويعيد قيمة صحيحة تبين نوع

السواقة حسب ما يلي:

DRIVE_REMOVABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

ويجب أن ننتبه أننا قمنا بتضمين الـ namespace التالي:

 using System.Runtime.InteropServices;

أعتقد أن باقي الكود سهل جداً

#19

السلام عليكم ورحمة الله وبركاته:

هذا الدرس سوف يشرح كيف نعرف نوع سواقة ما موجودة على الجهاز:

1 - من أجل معرفة نوع السواقة يجب استخدام التابع GetDriveType الذي يأخذ اسم السواقة ويعيد قيمة صحيحة تبين نوع

السواقة حسب ما يلي:

DRIVE_REMOVABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

ويجب أن ننتبه أننا قمنا بتضمين الـ namespace التالي:

 using System.Runtime.InteropServices;

أعتقد أن باقي الكود سهل جداً

DriverType.zip

هذا الموضوع مغلق.

مواضيع مشابهة