امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
1001 نكته در #C
نویسنده پیام
moam آفلاین
كاربر دو ستاره
**

ارسال‌ها: 110
موضوع‌ها: 12
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 71
( 222 تشکر در 92 ارسال )
ارسال: #1
1001 نكته در #C
حاشیه دار کردن کنترل TextBox با یک رنگ دلخواه
در کلاس TextBox خود (و یا سایر کنترلهای دلخواه : کامبوباکس، لیست باکس و ...) بنویسید :
private static int WM_NCPAINT = 0x0085;
private static int WM_ERASEBKGND = 0x0014;
private static int WM_PAINT = 0x000F;

[DllImport("user32.dll")]
static extern IntPtr GetDCEx(IntPtr hwnd, IntPtr hrgnclip, uint fdwOptions);

[DllImport("user32.dll")]
static extern int ReleaseDC(IntPtr hwnd, IntPtr hDC);

protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_NCPAINT || m.Msg == WM_ERASEBKGND || m.Msg == WM_PAINT)
{
IntPtr hdc = GetDCEx(m.HWnd, (IntPtr)1, 1 | 0x0020);

if (hdc != IntPtr.Zero)
{
Graphics graphics = Graphics.FromHdc(hdc);
Color borderColor = Color.Blue;
Rectangle rectangle = new Rectangle(0, 0, this.Width, this.Height);
ControlPaint.DrawBorder(graphics, rectangle, borderColor, ButtonBorderStyle.Solid);
m.Result = (IntPtr)1;
ReleaseDC(m.HWnd, hdc);
}
}
}
توجه داشته باشید که انجام اینکار صرفا بوسیله override کردن رویداد paint و رسم یک مستطیل امکانپذیر نیست.
محو شدن تدریجی یک فرم با تغییر دادن خاصیت Opacity
private void button1_Click(object sender, EventArgs e)
{
this.Opacity = 1;
for (int i = 0; i < 100; i++)
{
this.Opacity -= 0.01;
Application.DoEvents();
}
}
this به آبجکت فعلی از فرم اشاره دارد.
هر روز چند تا براتون ميذارم اميدوارم به كار بيان و مفيد باشن
(آخرین ویرایش در این ارسال: ۲۸-فروردین-۱۳۸۹, ۰۳:۲۴:۵۷، توسط moam.)
۲۸-فروردین-۱۳۸۹, ۰۳:۲۱:۲۵
ارسال‌ها
پاسخ
HoseinVig آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 1,165
موضوع‌ها: 97
تاریخ عضویت: مرداد ۱۳۸۵

تشکرها : 4768
( 2464 تشکر در 677 ارسال )
ارسال: #2
RE: 1001 نكته در #C
سلام
البته منو ببخشید ، فایل کامل word هزار و یک نکته در C# که در سایت برنامه نویس وجود داره قبلا جمع آوری شده براتون پیوست کردم که واقعا مفیده.


فایل‌(های) پیوست شده
.rar   1001 Point In C#.Net.rar (اندازه: 159.46 KB / تعداد دفعات دریافت: 411)

۲۸-فروردین-۱۳۸۹, ۱۳:۰۹:۳۷
ارسال‌ها
پاسخ
تشکر شده توسط : godvb, naatamam, ajlajlajl, Payman62, moam, kh0rshid_ir, aminjo0o0on
moam آفلاین
كاربر دو ستاره
**

ارسال‌ها: 110
موضوع‌ها: 12
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 71
( 222 تشکر در 92 ارسال )
ارسال: #3
RE: 1001 نكته در #C
از بنامه نويس چيزي نمي دونم پس اگ شما همش رو دارين اونهايي كه شما ندارين رو من ميذارم
كه بشه 2001
۲۹-فروردین-۱۳۸۹, ۰۱:۲۱:۳۵
ارسال‌ها
پاسخ
تشکر شده توسط : ajlajlajl
moam آفلاین
كاربر دو ستاره
**

ارسال‌ها: 110
موضوع‌ها: 12
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 71
( 222 تشکر در 92 ارسال )
ارسال: #4
RE: 1001 نكته در #C
یه برنامه که با استفاده از اون میشه هر فایل exe رو تحت برنامه اجرا کرد و درون یک کنترل( مثلا پنل ) قرار داد.
فکر می کنم در بعضی از مواقع، واقعا کارا باشه.


فایل‌(های) پیوست شده
.zip   1.zip (اندازه: 80.28 KB / تعداد دفعات دریافت: 142)
.zip   2.zip (اندازه: 10.25 KB / تعداد دفعات دریافت: 106)
۲۹-فروردین-۱۳۸۹, ۰۲:۵۴:۱۴
ارسال‌ها
پاسخ
تشکر شده توسط : HoseinVig, Payman62, اشک
moam آفلاین
كاربر دو ستاره
**

ارسال‌ها: 110
موضوع‌ها: 12
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 71
( 222 تشکر در 92 ارسال )
ارسال: #5
افزودن قطعه كد به ToolBox
افزودن قطعه كد به ToolBox

قطعه كدي كه زياد مورد استفاده قرار مي گيرد در جعبه ابزار قرار مي دهيم
سپس با كليك كردن روي آن، قطعه كد مورد نظر را در برنامه قرار دهيد.
براي اضافه كردن كد به جعبه ابزار مي تونيد اون رو انتخاب كنيد سپس با ماوس روي جعبه ابزار
drag كنيدو روي دستور كليك راست و Rename كرده و نام بامفهومي به اون بديد و براي استفاده از اين كد در برنامه كافي است كه مكان نما را به جايي كه مي خواهيد كد در آن قرار گيرد ببريد و سپس روي دستور دابل كليك كنيد..
۳۰-فروردین-۱۳۸۹, ۰۱:۱۸:۲۵
ارسال‌ها
پاسخ
تشکر شده توسط : ajlajlajl, اشک
moam آفلاین
كاربر دو ستاره
**

ارسال‌ها: 110
موضوع‌ها: 12
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 71
( 222 تشکر در 92 ارسال )
ارسال: #6
RE: 1001 نكته در #C
محاسبه تعداد صفحات یک فایل PDF توسط عبارات منظم
:


كد:
using System.IO;
using System.Text.RegularExpressions;

int PDF_page_counter(string path)
{
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs);
string pdf_text = sr.ReadToEnd();
//======================================
Regex rgx = new Regex(@"/Type\s*/Page[^s]");
MatchCollection matches = rgx.Matches(pdf_text);
return matches.Count;
}
نحوه استفاده :


کد:
MessageBox.Show(PDF_page_counter(@"E:\1.pdf").ToString());
۳۰-فروردین-۱۳۸۹, ۱۶:۰۷:۰۳
ارسال‌ها
پاسخ
تشکر شده توسط : اشک
HoseinVig آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 1,165
موضوع‌ها: 97
تاریخ عضویت: مرداد ۱۳۸۵

تشکرها : 4768
( 2464 تشکر در 677 ارسال )
ارسال: #7
RE: 1001 نكته در #C
سلام
دستتون درد نکنه فقط تا جایی که ممکنه برای نوشتن کد ها از تگ کد استفاده کن
کد:
کد
در نوار ابزار با # مشخص شده

(آخرین ویرایش در این ارسال: ۳۰-فروردین-۱۳۸۹, ۱۹:۰۰:۳۷، توسط HoseinVig.)
۳۰-فروردین-۱۳۸۹, ۱۹:۰۰:۰۷
ارسال‌ها
پاسخ
تشکر شده توسط : moam, اشک, kh0rshid_ir
moam آفلاین
كاربر دو ستاره
**

ارسال‌ها: 110
موضوع‌ها: 12
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 71
( 222 تشکر در 92 ارسال )
ارسال: #8
RE: 1001 نكته در #C
از عملگر Xor میتوان برای به رمز درآوردن متن استفاده کرد. ویژگی کار این عملگر این است که اگر یک عدد را دوبار متوالی با عددی دیگر Xor کنید، دوباره به همان عدد اولیه خواهید رسید. برای مثال کد اسکی حرف A را که 65 است با عدد 50 Xor میکنیم. حاصل این عمل عدد 115 است. حال اگر این عدد 115 را دوباره با 50 Xor کنیم به عدد 65 میرسیم. در مثال زیر نمونه کدی را که متن یک TextBox با Xor به حالت رمز درمی‏آورد و از آن خارج میکند بررسی میکنیم.
کد:
if ((TextBox.Text != "")) {
if ((SaveFileDialog.ShowDialog == Windows.Forms.DialogResult.OK)) {
FileOpen(1, SaveFileDialog.FileName, OpenMode.Output);
// Encryption codes.
for (int index = 0; (index
<= (TextBox.TextLength - 1)); index++) {
eachLetter = TextBox.Text.Substring(index, 1);
Print(1, Asc(eachLetter), Xor, 369);
}
}
}


در حلقه For Next به اندازه طول متن در TextBox یکی یکی حروف آن خوانده میشوند و بعد از استخراج کد اسکی هر یک در عدد 369 Xor میشوند و عدد حاصل در فایل نوشته میشود. کد از رمز خارج کردن فایل در زیر آمده.

کد:
if ((OpenFileDialog.ShowDialog == Windows.Forms.DialogResult.OK)) {
FileOpen(1, OpenFileDialog.FileName, OpenMode.Input);
// Read encrypted numbers from file, convert with Xor and build the string.
for (
; EOF(1);
) {
Input(1, encryptedNumber);
decryptedChr = Chr(encryptedNumber, Xor, 369);
decryptedChr;
}
}

در حلقه Do Until تا زمانی که فایل به انتها نرسیده با دستور Input یکی یکی از آن می‏خواند و در متغیری از نوع Short به نام encryptedNumber دخیره میکند. سپس در خط بعد عدد ذخیره شده دوباره با 369 Xor میشود و همزمان به نوع Char تبدیل میشود.
(آخرین ویرایش در این ارسال: ۳۱-فروردین-۱۳۸۹, ۰۲:۳۴:۴۹، توسط moam.)
۳۱-فروردین-۱۳۸۹, ۰۲:۲۷:۴۴
ارسال‌ها
پاسخ
تشکر شده توسط : HoseinVig, اشک
moam آفلاین
كاربر دو ستاره
**

ارسال‌ها: 110
موضوع‌ها: 12
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 71
( 222 تشکر در 92 ارسال )
ارسال: #9
RE: 1001 نكته در #C
مشاهده و ذخیره تمام پیام های ارسالی در شبکه


فایل‌(های) پیوست شده
.rar   Sniffer_Code1.rar (اندازه: 458.94 KB / تعداد دفعات دریافت: 105)
.rar   Sniffer_Document2.rar (اندازه: 46.17 KB / تعداد دفعات دریافت: 94)
۳۱-فروردین-۱۳۸۹, ۱۵:۰۱:۳۷
ارسال‌ها
پاسخ
تشکر شده توسط : اشک
moam آفلاین
كاربر دو ستاره
**

ارسال‌ها: 110
موضوع‌ها: 12
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 71
( 222 تشکر در 92 ارسال )
ارسال: #10
RE: 1001 نكته در #C
سلام
چند روز قبل نیاز به برنامه ای داشتم که پردازش نسبتا ساده ای رو توی زمان کمی انجام بده!
اول برنامه رو توی C#‎‎ نوشتم ولی دیدم زمان هر Loop اون زیاده (حدود 250 Tick).به این نتیجه رسیدم که قسمت اصلی پردازش رو توی VC بنویسم و در C#‎‎ پردازش رو به یک Function که در DLL ای که در VC ساخته بودم محول کنم.ساخت DLL راحت انجام شد (هر Loop پردازش صفر Tick طول می کشید!) ولی در هنگام استفاده مشکلی پیش اومد.در نهایت متوجه دو نکته شدم (هرچند جایی به این صراحت ندیدم ولی کم و بیش به آنها اشاره شده است) که برای دوستانی که احتمالا مانند من می خواهند DLL ساخته خودشان را در C#‎‎ استفاده (DllImport) کنند،می نویسم:
1) حتما Function درون VC باید از نوع C باشد (از نوع CPP نباشد).
2) حتما نسخه Release خروجی VC (منظور DLL است) را در اختیار برنامه C#‎‎ بگذارید.
در غیر اینصورت با پیغامی شبیه:

کد:
کد:
Unable to find an entry point named ...
روبرو خواهید شد.
در ضمیمه یک نمونه ساخت DLL در VC و یک نمونه استفاده از آن در C#‎‎ آمده است.
موفق باشید


فایل‌(های) پیوست شده
.zip   CreateDllInVcAndUseInCs.zip (اندازه: 27.6 KB / تعداد دفعات دریافت: 78)
۰۳-اردیبهشت-۱۳۸۹, ۰۱:۱۷:۴۶
ارسال‌ها
پاسخ
تشکر شده توسط : Payman62, اشک
esmaeily-hosein آفلاین
كاربر دو ستاره
**

ارسال‌ها: 232
موضوع‌ها: 12
تاریخ عضویت: دى ۱۳۸۴

تشکرها : 6
( 91 تشکر در 46 ارسال )
ارسال: #11
RE: 1001 نكته در #C
نقل قول: ) حتما Function درون VC باید از نوع C باشد (از نوع CPP نباشد).
2) حتما نسخه Release خروجی VC (منظور DLL است) را در اختیار برنامه C#‎‎ بگذارید.


این حرف شما پایه درستی نداره .
در مورد اول که اونو به طور کامل رد میکنم فقط میگم بعضی از Type ها هستند که در .net معادل اونها وجود نداره مثلا برای String باید ار نوع BStr استفاده بشه . برای map کردن Type ها c++ در .net هم در هزار تا مقاله بهش اشاره شده .


2- در مورد خطای دوم هم به این دلیل بوده است که بایستی توابع نوشته شده خروجی در فایلی مجزا بنام Def معرفی شوند .

3- در مورد سرعت بر میگرده به تعاریف manage,native هر چند بحثی طولانی است . اما در خیلی از موارد سرعت کدهای manage بیشتر است .
اگر خواستی بگو دلیلش بهت بگم.

هر چی روش خوبه توش خوب نیست!
۰۳-اردیبهشت-۱۳۸۹, ۱۴:۲۸:۱۵
ارسال‌ها
پاسخ


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS