12.rar
منبع: برنامه نویس
12.rar
منبع: برنامه نویس
آخرین ویرایش به وسیله mary3541 : دوشنبه 25 شهریور 1387 در 21:29 عصر دلیل: عنوان
عمل چک باکس مثل رادیو باتون
privatevoid checkBox2_CheckedChanged(object sender, EventArgs e)
{
if (checkBox2.Checked)
{
checkBox1.Checked = false;
//و بقیه
}
}
privatevoid checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked)
checkBox2.Checked = false;
}
}
با فرض داشتن ليستي از اعداد مانند :
private List<int> numbers = new List<int> { 2, 12, 4, 6, 11 };ميتوانيم بنويسيم :
numbers = numbers.OrderBy(i => System.Guid.NewGuid()).ToList<int>();
براي ايجادمحدوديت درنوع پذيرش كاراكتر دريك TextBoxمي توان از دورويداد keypress و keydown به اين صورت استفاده كرد.
به عنوان مثال فقط مي خواهيم اعدادپذيرفته شوند:
تعريف يك متغيرboolean درسطح فرم:
bool KeyHandle = false;
رخداد keydown :
private void Numeric_KeyDown(object sender, KeyEventArgs e)
{
if ((e.KeyCode == Keys.Back) || (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) || (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9))
KeyHandle = false;
else
KeyHandle = true;
}
حال دررخداد KeyPress براساس محتواي منطقي متغير رخدادراHandle مي كنيم:
private void Numeric_KeyPress(object sender, KeyPressEventArgs e)
{
if (KeyHandle == true)
{
e.Handled = true;
}
}
آخرین ویرایش به وسیله nathan : یک شنبه 05 آبان 1387 در 11:16 صبح
به منظور دریافت فقط کاراکتر عدد در کنترلهای ویرایشی می توانید از کد زیر استفاده کنید. با استفاده از این کد معیین می کنید که کنترل ویرایشی مورد نظر شما فقط عدد صحیح (غیر منفی) دریافت می کند یا مجوز درج و دریافت علامت ممیز (.) را نیز دارد یا خیر؟ برای اینکار یک کلاس استاتیک با نام Tools که سه مقدار استاتیک از (یک نوع String و دو نوع bool) ایجاد شده است.
در کد فوق دو تابع استاتیک DetermineTypeOfCharacter(object sender, KeyEventArgs e) و public static void PreventCharacterEnter(object sender, KeyPressEventArgs e) نیز وجود دارد. خوب فقط لازم است برای هر کنترل ویرایشی مانند TextBOx مقادیر مورد نظر خود را ست کرده(مقدار اساتیک Tools.text جهت ارسال تکس موجود در کنترل ویرایشی و تعیین مقدار true یا false برای مقدار استاتیک (Tools.isDecimalAllow و در رویداد keyDown کنترل مورد نظر خود تابع DetermineTypeOfCharacter(object sender, KeyEventArgs e) و در رویداد keyPress نیز تابع دوم یعنی public static void PreventCharacterEnter(object sender, KeyPressEventArgs e) را صدا بزنید. توجه داشته باشید که دو مقدار استاتیک text از نوع string و isDecimalAllow از نوع بولین را جهت مجوز دریافت علامت ممیز (.) یا عدم مجوز آن در رویداد keyDown (مشابه با کد زیر) ست کنید:
static class Tools
{
// Boolean flag used to determine when a character other than a number is entered.
private static bool nonNumberEntered = false;
public static string text="0";
public static bool isDecimalAllow=false;
//تابع زیر نوع کاراکتر ارسال شده به تاکس باکهاسی مشخص شده توسط شما را تعیین می کند
public static void DetermineTypeOfCharacter(object sender, KeyEventArgs e)
{
if (isDecimalAllow)
goto decimalAllow;
else goto decimalNotAllow;
decimalAllow:
if (text.Contains("."))
{
// Initialize the flag to false.
nonNumberEntered = false;
// Determine whether the keystroke is a number from the top of the keyboard.
if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
{
// Determine whether the keystroke is a number from the keypad.
if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
{
// Determine whether the keystroke is a backspace.
if (e.KeyCode != Keys.Back)
{
// A non-numerical keystroke was pressed.
// Set the flag to true and evaluate in KeyPress event.
nonNumberEntered = true;
return;
}
}
}
}
else
{
nonNumberEntered = false;
if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
{
if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
{
// Determine whether the keystroke is a backspace.
if (e.KeyCode != Keys.Back)
{
//Determine whether the keystroke is a Decimal.
if (e.KeyCode != Keys.Decimal)
// A non-numerical keystroke was pressed.
// Set the flag to true and evaluate in KeyPress event.
nonNumberEntered = true;
return;
}
}
}
}
decimalNotAllow:
nonNumberEntered = false;
if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
{
if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
{
if (e.KeyCode != Keys.Back)
{
nonNumberEntered = true;
return;
}
}
}
}
//تابع زیر از ورود کاراکترهای غیر مجاز در داخل تکس باکسهای مورد نظر شما جلوگیری می کند
public static void PreventCharacterEnter(object sender, KeyPressEventArgs e)
{
// Check for the flag being set in the KeyDown event.
if (nonNumberEntered == true)
{
// Stop the character from being entered into the control since it is non-numerical.
e.Handled = true;
System.Media.SystemSounds.Beep.Play();
}
}
از مقدار nonNumberEntered که از نوع bool است جهت چک کردن مقدار معتبر استفاده می شود. در کد فوق از دو lable و دستور goto نیز استفاده شده است.
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
Tools.text = this.modifyNumberTextBox.Text;
Tools.isDecimalAllow = false;
Tools.DetermineTypeOfCharacter(sender, e);
}
private void modifyNumberTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
Tools.PreventCharacterEnter(sender, e);
}
ضمناً برای زیبایی کار در صورت عدم ورود کاراکتر صحیح در کنترل ویرایشی مورد نظر با استفاده از کد زیر در رویداد استاتیک public static void PreventCharacterEnter(object sender, KeyPressEventArgs e) صدای Beep هشدار لازم را به کاربر اعلام می کند:
System.Media.SystemSounds.Beep.Play();
سلام
VS این امکان رو به شما میده که کدی که از اون زیاد استفاده می کنید رو به ToolBox اضافه کنید تا در مواقع بعدی با یک دابل کلیک ساده بتونید ازش استفاده کنید .
برای اینکار کافیه در پنجره کدنویسی ، قطعه کد مورد نظرتون رو انتخاب کرده و اون رو به Toolbox درگ کنید . همچنین با Right Click روی گزینه اضافه شده و انتخاب Rename Item می تونید نام قطعه کد مورد نظر رو تغییر بدید .
مثالی ساده از LINQ ، که از یک آرایه اعداد زوج را انتخاب میکند :
int[] a = { 2, 1, 3, 6, 5, 8 };
var QResults = from n in a
where n % 2 == 0
select n;
string s = "";
foreach (var item in QResults)
{
s += item.ToString()+"\n";
}
MessageBox.Show(s);
موفق و پیروز باشید !!!!
سلام
یه سری pdf درمورد :
1- در مورد ساخت فرم های شفاف
2- استفاده از فایلهای فلش در #C
3- گرفتن Backup و Restore کردن دیتابیس
4- پخش فایل های صوتی تصویری به وسیله Windows Media Player
بهتر است هميشه پروژههاي خود را مستند سازي كنيم تا زماني كه به دلايل مختلف نياز به تغيير يا استفاده مجدد آنها باشد بتوانيم به راحتي كدها و قسمتهاي مختلفي كه نوشته ايم را سريعا به ياد آوريم يا مرور كنيم. براي اينكار ابزارهاي بسيار زيادي وجود دارد اما برخي از آنها كاربردي و مفيدند. اين جدول كه در سايت WikiPedia وجود دارد مقايسه جالبي را بين اين برنامه ها و امكاناتي كه ارائه ميكنند نشان داده است.
Comparison of documentation generators
For Code
Doxygen
يكي از بهترين برنامه براي مستند سازي كد كه امكانات زيادي دارد، به فرمتهاي مختلفي خروجي ميدهد و بسياري از زبانها و سيستمعامل هاي مختلف را نيز پشتيباني ميكند.
فرمتهاي خروجي HTML - CHM - RTF - PDF - LaTeX - PostScript - man pages - XML
مستند سازي كد را به صورتي ساده تر انجام ميدهد. و ظاهري زيبا دارد.
فرمتهاي خروجي: HTML - CHM - RTF - PDF - XML
قابليت اضافه شدن در محيط VisualSyudio را نيز دارا ميباشد و ميتوانيد در همان محيط به توليد مستندات بپردازيد
فرمتهاي خروجي: HTML - CHM
با پيروري از قواعدي ساده در Commentها ميتوانيد تغييرات مستقيمي در مستندات داشته باشيد مثلا كدام كلمات عنوان يا زير عنوان باشد يا كدام توپر(Bold) چه قسمتهايي بالت دار باشند
فرمتهاي خروجي: HTML - CHM
مستنداتي مشابه MSDN توليد ميكند. و آنها را در MSDN سيستم اضافه ميكند.
فرمتهاي خروجي: HTML - CHM - RTF - XML
For DataBase
اين برنامه ها با اتصال به سرور و ديتابيس مورد نظر كليه اطلاعات آنرا (به جز دادههاي جداول) اعم از جداول و مشخصات فيلدها، توابع، كاربران، قوانين تعيين شده و ... را مستند سازي كرده و به صورت مرتب و مجتمع تحويل ميدهد.
DB Scribe
اين برنامه اطلاعات مربوط به ديتابيس را مستندسازي ميكند.
فرمتهاي خروجي: HTML - CHM - RTF
BI Documenter
اين برنامه اطلاعات مربوط به ديتابيس را مستندسازي ميكند. دياگرامهاي آنرا رسم ميكند. مستندات آن ظاهر زيباتري دارند
فرمتهاي خروجي: HTML - CHM
آن لحظه که تنها اعتبار کسی که مساله ای را مطرح کرده است، شما را در اشتباه بودن ایده هایتان قانع کرد،
آن لحظه،
لحظه وداع شما با دنیای خلاقیت و پیشرفت خواهد بود. . .
برنولی
يك روش استاندارد براي ايجاد فرمهاي غير مستطيلي (در اين مثال مثلثي شكل).
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void frmMain_Load(object sender, EventArgs e)
{
System.Drawing.Drawing2D.GraphicsPath MyPaht = new System.Drawing.Drawing2D.GraphicsPath();
MyPaht.AddPolygon(new Point[] { new Point(0, 0), new Point(0, this.Height), new Point(this.Width, 0) });
Region MyRegion = new Region(MyPaht);
this.Region = MyRegion;
}
اگه از محیط سفید رنگ IDE خسته شدید
این دوتا فایل رو استفاده کنید
جهت استفاده تو IDE
Tools-> Import and Export Settings
نحوه ساخت setup برای پروژه با نصب SqlServer و دات نت
https://barnamenevis.org/showthread.php?t=139529
comboBox2.Items.AddRange(comboBox1.Items.Cast<Obje ct>().ToArray());ممکنه روشهای سرراست تری هم وجود داشته باشه
استفاده ازديكشنري:
Dictionary<datatype1, datatype2> name = newDictionary<datatype1, datatype2>();
datatype1 : Key
datatype2 :value
بااستفاده ازديكشنري مي توانيد آرايه اي ازمطالب به هم وابسته راكه به هرركورديك كليدتخصيص مي دهيددريك مجموعه جمع كنيد.
ارث بری در بین فرم ها
آخرین ویرایش به وسیله danial82 : چهارشنبه 25 دی 1387 در 18:29 عصر
انجام اين كار خيلي ساده هست. از كلاس TimeSpan استفاده ميكنيم.
به مثال زير توجه كنيد:
دو تا شي ء از نوع DateTime ميسازم، با تاريخ و ساعت دقيق:
DateTime myStartTime=new DateTime(2009,1,1,12,13,14,157);
DateTime myEndTime=new DateTime(2010,9,12,13,14,15,165);
حالا يك شي ء از نوع TimeSpan ميسازم و اونو اينطوري مقدار دهي ميكنم:
TimeSpan myDifference=myEndTime-myStartTime;
الان داخل myDifference فاصله ي زماني ميان دو زمان مد نظرمون قرار داره. كافيه تا براي دسترسي به محتواي اون، از خصوصيات خودش استفاده كنيم.
مثلاً داريم:
int totalDays=myDifference.Days ; //تعداد روزهاي ميان دو تاريخ مذبور
int totalHours=myDifference.Hours; //تعداد ساعات ميان دو تاريخ مذبور
int totalMinutes=myDifference.Minutes; //تعداد دقيقه هاي ميان دو تاريخ مذبور
int totalSeconds=myDifference.Seconds; //تعداد ثانيه هاي ميان دو تاريخ مذبور
int totalMilliSeconds=myDifference.MilliSeconds; //تعداد ميلي ثانيه هاي ميان دو تاريخ مذبور
كلاس TimeSpan متدهاي مفيد ديگه اي هم داره.
موفق باشيد.
(با تشكر از danial82 عزيز كه متذكر شدند دوست عزيزمون sinpin قبلاً اين كلاس رو معرفي كرده بودند. از sinpin عزيز هم ممنونم.)
آخرین ویرایش به وسیله newgoldenman : شنبه 28 دی 1387 در 03:25 صبح
با استفاده از اين روش بسيار ساده و عالي، بدون هيچ زحمت و توابع پيچيده و API هاي ... و بدون هيچ نيازي به Hook كردن صفحه كليد و ... براي برنامتون يك كليد ميانبر تعريف كنيد كه هر موقع و هر جاي ويندوز كه اون كليد فشار داده شد، براتون يك كاري انجام بده.
اين كار خيلي ساده هست:
1: يك پروژه ي ساده ي Windows Application ايجاد كنيد.
2: كلاس Form1 رو بدين ترتيب تغيير بديد:
public partial class Form1 : Form
{
const int HOTKEY_ID = 31197; //any number to be used as an id within this app
const int WM_HOTKEY = 0x0312;
public enum KeyModifiers //enum to call 3rd parameter of RegisterHotKey easily
{
None = 0,
Alt = 1,
Control = 2,
Shift = 4,
Windows = 8
}
//API Imports
[DllImport("user32.dll", SetLastError = true)]
public static extern bool RegisterHotKey(
IntPtr hWnd, // handle to window
int id, // hot key identifier
KeyModifiers fsModifiers, // key-modifier options
Keys vk // virtual-key code
);
[DllImport("user32.dll", SetLastError = true)]
public static extern bool UnregisterHotKey(
IntPtr hWnd, // handle to window
int id // hot key identifier
);
protected override void WndProc(ref Message msg)
{
// Listen for operating system messages.
switch (msg.Msg)
{
case WM_HOTKEY:
// this is the block the app turns in if the hotkey has been pressed
//so do your f@cking hotkey stuff here :-D
MessageBox.Show("F11 Pressed!");
break;
}
base.WndProc(ref msg);
}
//globalKeyboardHook myHookKeyBoard = new globalKeyboardHook();
public Form1()
{
InitializeComponent();
bool bcheck = RegisterHotKey(Handle, HOTKEY_ID, KeyModifiers.None, Keys.F11);
}
}
خيلي كارها ميشه باز براي راحت تر شدن استفاده از اين روش انجام داد. مثلاً اينكه بصورت يك DLL درش بياريم، يا توي يك كلاس بنويسيم و .....
اين هم تاپيك سوالم كه در نهايت به اين روش آگاهي يافتم:
https://barnamenevis.org/showth...d=1#post668015
اميدوارم كه مطلب مفيدي بوده باشه براتون.
موفق باشيد.
روش دیگر برای کپی آیتم های یک کامبو باکس به دیگری در موقعی که بخواهیم از کلاس استفاده کنیم
BindingSource bs = new BindingSource(comboBox1, "Items");
comboBox2.DataSource = bs;
Using Settings in C#
سلام ، دوستان تابعی که در زیر نوشتم معکوس (مقلوب) یک رشته را می یابد ،
کد مورد نظر :
void str_rev(string str,ref string res)
{
//finds reverse of string str and put result in res
if(str.Length == 1)
{
res += str;
}
else
{
res += str[str.Length - 1].ToString();
str_rev(str.Substring(0, str.Length - 1),ref res);
}
}
نحوه استفاده :
private void button1_Click(object sender, EventArgs e)
{
string res = "";
str_rev("SALAR", ref res);
MessageBox.Show(res);
}
امیدوارم مفید بوده باشد !!!
به عنوان مثال میخواهیم بدون اینکه متد text changed تحریک شود مقدار text box را عوض کنیم و بعد متد را اجرا کنیم
//remove eventhandler
TextBox1.textchanged-=new EventHandler(TextBox1_textchanged);
TextBox1.text="value";
//add event handler
TextBox1.textchanged+=new EventHandler(TextBox1_textchanged);
آخرین ویرایش به وسیله sara62 : پنج شنبه 10 اردیبهشت 1388 در 19:19 عصر
برای اینکه کلید های سوئیچی هیچ تاثیری نداشته باشن خصوصیت key preview فرم را با Trueمقدار دهی میکنیم و کد زیر رو برای خصوصیت key down فرم می نویسیم
if(e.Alt && e.shift)
}
InputLanguage.currentInputLanguage=InputLanguage.F ormculture(system.Globalization.cultureInfo.Getcul tureInfo("fa"));
آخرین ویرایش به وسیله sara62 : پنج شنبه 10 اردیبهشت 1388 در 19:18 عصر
برگرداندن نام تمام درایو های سیستم
بدست آوردن نام مودم سیستم
پخش آهنگ از اسپیکر داخل کیس
نمایش پسورد در اشکال مختلف
خاموش کردن،راه اندازی مجدد، stand by, hibernate سیستم
مرجع کامل رجیستری در #C
پخش انواع صداهای خطا، بیپ، و غیره
آیا می دانید سیستم شما چه مدت است که روشن است؟
نوشته شد: برنامه ای برای نمایش فایل های ورد همراه با تصویر، فرمول و ... در فرم های #C
نمایش وضعیت کلیدهای Num Lock, Caps Lock, Scroll Lock
هشدار دهنده اتصال وسیله به USB
ConnectionString برای پایگاه داده پسورد دار
آخرین ویرایش به وسیله وحید پیرمرادیان : سه شنبه 22 اردیبهشت 1388 در 18:57 عصر
تبدیل عکس به آیکن.....
Size size = new Size(32, 32);
Bitmap bmp = new Bitmap(Image.FromFile(pathStr), size);
Icon temp = Icon.FromHandle(bmp.GetHicon());
FileStream newIcon = new FileStream("c:\\sa.ico", FileMode.Create);
temp.Save(newIcon);
newIcon.Close();
Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."
private void func_SetLanguagePersian()
{
System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("fa-IR");
InputLanguage MyL;
string BackL;
MyL = InputLanguage.CurrentInputLanguage;
MyCulture = MyL.Culture;
BackL = MyCulture.Name;
MyCulture = new System.Globalization.CultureInfo("fa-IR");
InputLanguage.CurrentInputLanguage = System.Windows.Forms.InputLanguage.FromCulture(MyC ulture);
}
private void func_SetLanguageEnglish()
{
System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en");
InputLanguage MyL;
string BackL;
MyL = InputLanguage.CurrentInputLanguage;
MyCulture = MyL.Culture;
BackL = MyCulture.Name;
MyCulture = new System.Globalization.CultureInfo("en");
InputLanguage.CurrentInputLanguage = System.Windows.Forms.InputLanguage.FromCulture(MyC ulture);
}
یکی از روش های گرفتن مقادیر عددی برای ورودی استفاده از MaskedTextBox هست. روش دیگه استفاده از متد TryParse هست. این تابع دو پارامتر برای ورودی مگیره، یکی رشته ای که باید تبدیل بشه و دیگری متغییری که عدد تبدیل شده باید داخلش ذخیره بشه. این تابع مقداری از نوع bool بر میگردونه.
Console.Write("Enter a number for check: ");
int i = 0;
string inputNumber = Console.ReadLine();
if (int.TryParse(inputNumber, out i))
{
Console.WriteLine("Valid format");
}
else
{
Console.WriteLine("Not valid format");
}
Console.ReadKey()
توضیح: رنگ رو میتونید خودتون عوض کنید.
int start = 0;
int indexOfSearchText = 0;
private void button1_Click(object sender, EventArgs e)
{
int startindex = 0;
if (txtSearch.Text.Length > 0)
startindex = FindMyText(txtSearch.Text.Trim(), start, rtb.Text.Length);
if (startindex >= 0)
{
rtb.SelectionColor = Color.Red;
int endindex = txtSearch.Text.Length;
rtb.Select(startindex, endindex);
start = startindex + endindex;
}
}
private int FindMyText(string txtToSearch, int searchStart, int searchEnd)
{
if (searchStart > 0 && searchEnd > 0 && indexOfSearchText >= 0)
{
rtb.Undo();
}
int retVal = -1;
if (searchStart >= 0 && indexOfSearchText >= 0)
{
if (searchEnd > searchStart || searchEnd == -1)
{
indexOfSearchText = rtb.Find(txtToSearch, searchStart, searchEnd, RichTextBoxFinds.None);
if (indexOfSearchText != -1)
{
retVal = indexOfSearchText;
}
}
}
return retVal;
}
public class NumberToString
{
private static string[] yakan = new string[10] { "صفر", "يک", "دو", "سه", "چهار", "پنج", "شش", "هفت", "هشت", "نه" };
private static string[] dahgan = new string[10] { "", "", "بيست", "سي", "چهل", "پنجاه", "شصت", "هفتاد", "هشتاد", "نود" };
private static string[] dahyek = new string[10] { "ده", "يازده", "دوازده", "سيزده", "چهارده", "پانزده", "شانزده", "هفده", "هجده", "نوزده" };
private static string[] sadgan = new string[10] { "", "يکصد", "دوصد", "سيصد", "چهارصد", "پانصد", "ششصد", "هفتصد", "هشتصد", "نهصد" };
private static string[] basex = new string[5] { "", "هزار", "ميليون", "ميليارد", "تريليون" };
private static string getnum3(int num3)
{
string s = "";
int d3, d12;
d12 = num3 % 100;
d3 = num3 / 100;
if (d3 != 0)
s = sadgan[d3] + " و ";
if ((d12 >= 10) && (d12 <= 19))
{
s = s + dahyek[d12 - 10];
}
else
{
int d2 = d12 / 10;
if (d2 != 0)
s = s + dahgan[d2] + " و ";
int d1 = d12 % 10;
if (d1 != 0)
s = s + yakan[d1] + " و ";
s = s.Substring(0, s.Length - 3);
};
return s;
}
public string num2str(string snum)
{
string stotal = "";
if (snum == "0")
{
return yakan[0];
}
else
{
snum = snum.PadLeft(((snum.Length - 1) / 3 + 1) * 3, '0');
int L = snum.Length / 3 - 1;
for (int i = 0; i <= L; i++)
{
int b = int.Parse(snum.Substring(i * 3, 3));
if (b != 0)
stotal = stotal + getnum3(b) + " " + basex[L - i] + " و ";
}
stotal = stotal.Substring(0, stotal.Length - 3);
}
return stotal;
}
}
آخرین ویرایش به وسیله sara62 : دوشنبه 01 تیر 1388 در 01:38 صبح
TextChanged در DataGridView
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.Control.TextChanged += MyDataGridTextChanged;
}
private void MyDataGridTextChanged(object sender, EventArgs e)
{
MessageBox.Show(((Control)sender).Text);
}
تابع IsNumeric در C#
staticbool IsNumeric(object Expression)
{
bool isNum;
double retNum;
isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, out retNum);
return isNum;
}
نحوه استفاده برای یک textBox
bool IsNumber = IsNumeric(textBox1.Text);
سلام...نوشته شده توسط یكی از عزیزان برنامه نویس
یه توضیح كوچیك راجع به صورت سوال میدم، سپس میپردازم به حل اون و ...
صورت سوال:
توضیح كلی و ارائه ی راه حل برای حل سوال:سلام
ببخشید کسی میتونه راهنمایی کنه که چطوری توی C# میتونم تداخل ساعت بگیرم ؟
من دو فیلد دارم که ساعت شروع و پایان را در فرمی در C# میدم و باید با ساعت های شروع و پایان دیگه ای که در پایگاه sql دارم در جدول قراره ملاقات چک بشه و اگر تداخلی وجود داشت آن را اعلام کنه .
نمیدونم نوع فیلد رو باید از چه نوعی تعریف کنم timedate یا شایدم text ؟
لطفاً اگه کسی می دونه راهنمایی کنه که چه کدی باید بنویسم .
با تشکر
در حالتی كه فرض كنیم ساعت اول توی تاریخ اول و ساعت دوم توی تاریخ دوم قرار داره، یعنی مثلاً این دو تا زمان:
5 تیر 1388 ساعت 13:14:15
و
18 تیر 1388 ساعت 15:16:17
در این حالت، 13 حالت مختلف رو باید بررسی كرد برای بدست آوردن تمامی حالتهای تداخل موجود. كه توی این عكس براحتی قابل مشاهده هست:
دو تا خط آبی ابتدا و انتهای زمان ها هستند.
خط قرمز بالا ابتدا و انتهای زمان ها هست.
خط های سبز 13 حالت مختلف هستند.
نقاط مشكی رو هم زدم كه بهتر بشه فهمید سر و ته ماجرا كجاست!
حالا اگر این 13 حالت رو یه جمع بندی كلی بكنیم، به سه حالت كلی میرسیم.
توضیح كامل شیوه ی حل مسئله و كد مورد نیاز:
این الگوریتم و شیوه ای كه الان میخوام خدمتتون عرضه كنم، نتیجه ی تقریباً 6 روز تفكر و بررسی بنده برای برای انجام این كار هست. و تا حد 100% به نتیجه ای كه میده ایمان دارم. چون توی پروژه ای ازش استفاده كردم كه اگر حتی یك ثانیه بین دو تا زمان مورد نظر، Collision وجود داشته باشه، محاله كه بشه خسارتش رو جبران كرد...
به هر حال،خیلی از كدها رو كه مشابه بودند یا مورد نیاز شما نبودند، از كدها حذف كردم و یك نمونه ی خیلی ساده رو برای شما ویرایش كردم و این هم توضیحاتش:
من توی جدولی به نام AfishTadvin چند تا فیلد دارم كه دو تا از فیلدهام از نوع DateTime هست. میدونیم كه هر كدوم از این فیلدها حاوی تاریخ و البته ساعت و دقیقه و ... هستند!
شیوه ای كه من ازش استفاده كردم، بدین ترتیب هست كه ابتدا Collision احتمالی موجود بین تاریخ های موجود رو با تاریخ های مورد نظرم، بدست میارم، سپس اگر Collision ای مشاهده شد، حالا میام دوباره Collision موجود بین زمان های مورد نظرم رو با زمان های داخل پایگاه داده بدست میارم. در نهایت اگر چنین Collision ای موجود بود، اون رو متوجه میشم و ...
این هم كد:
فرض كنید كه داخل رویداد یك دكمه این كد رو داریم. هر موقع دكمه زده شد، دو تاریخ مورد نظر خودمون و همچنین زمان های مورد نظرمون رو به تابع هایی كه در ادامه مینویسم، میفرستیم و ...
این تابع اصلی هست كه درون اون دستور خاص مورد نیاز ساخته شده و به SQL داده میشه. اگر بین تاریخ های مورد نظر ما، و زمان های ذخیره شده توی بانك اطلاعاتیمون، Collision وجود داشته باشه، با استفاده از تابع بعدی كه در ادامه مینویسم، زمان های مورد نظر رو برای Collision بررسی میكنیم و ...
DateTime afishTimeFromCollision = new DateTime(faDatePicker1.SelectedDateTime.Year, faDatePicker1.SelectedDateTime.Month, faDatePicker1.SelectedDateTime.Day, ngmTimePicker1.Hour, ngmTimePicker1.Minute, 0);
DateTime afishTimeToCollision = new DateTime(faDatePicker2.SelectedDateTime.Year, faDatePicker2.SelectedDateTime.Month, faDatePicker2.SelectedDateTime.Day, ngmTimePicker2.Hour, ngmTimePicker2.Minute, 0);
string xAfishCodeTemp = "";
string xTempEqpSerial = "";
bool xContinue = true;
for (int i = 0; i < dataGridViewTolid.Rows.Count; i++)
{
xTempEqpSerial = dataGridViewTolid.Rows[i].Cells[1].Value.ToString();
if (myCollisionChecker.NGMEquipmentsCollisionDetectio n(xTempEqpSerial, afishTimeFromCollision, afishTimeToCollision))
{
xAfishCodeTemp = myCollisionChecker.AfishCode();
MessageBox.Show("Time Collision Detection... You are not able to continue!");
xContinue = false;
break;
}
}
if (!xContinue)
{
break;
}
این هم از تابع آخر. كارش این هست كه Collision احتمالی بین دو زمان مختلف رو با دو زمان دیگه بررسی و نتیجه رو به ما اعلام میكنه...
public bool NGMEquipmentsCollisionDetection(string eqpSerialNumber, DateTime afishTimeFrom, DateTime afishTimeTo)
{
_AfishCode = "";
TimeSpan mySpan = new TimeSpan();
mySpan = afishTimeTo - afishTimeFrom;
int dayCounter = mySpan.Days;
int myHourFrom = afishTimeFrom.Hour;
int myMinuteFrom = afishTimeFrom.Minute;
int myHourTo = afishTimeTo.Hour;
int myMinuteTo = afishTimeTo.Minute;
int xNum;
string[] xEqpList;
bool xTemp = false;
for (int i = 0; i <= dayCounter; i++)
{
DateTime xAfishTimeFrom = afishTimeFrom.AddDays(i);
_AfishTimeFrom = new DateTime(xAfishTimeFrom.Year, xAfishTimeFrom.Month, xAfishTimeFrom.Day, 0, 0, 0);
_AfishTimeTo = new DateTime(xAfishTimeFrom.Year, xAfishTimeFrom.Month, xAfishTimeFrom.Day, 23, 59, 59);
#region AfishTadvin
//Check the times for collision on SQL Command. If there is any collision on the DATES, SQL returns its rows...
cmd = new SqlCommand("SELECT AfishCode,EqpList,AfishTimeFrom,AfishTimeTo FROM AfishTadvin WHERE (AfishTimeFrom>=@p1 AND AfishTimeFrom<=@p2) OR (AfishTimeTo>=@p1 AND AfishTimeTo<=@p2) OR (AfishTimeFrom<=@p1 AND AfishTimeTo>=@p2)", con);
SqlParameter p1 = new SqlParameter("p1", _AfishTimeFrom);
SqlParameter p2 = new SqlParameter("p2", _AfishTimeTo);
p1.SqlDbType = SqlDbType.DateTime;
p2.SqlDbType = SqlDbType.DateTime;
SqlParameter[] parameterArray = new SqlParameter[] { p1, p2 };
foreach (SqlParameter parameterX in parameterArray)
{
cmd.Parameters.Add(parameterX);
}
try
{
con.Close();
con.Open();
dr = cmd.ExecuteReader();
if (dr.HasRows)
{
try
{
while (true)
{
dr.Read();
myNGM = new NGMPersonsCodeString(dr[1].ToString());
xNum = myNGM.NGMPersonsCodeListCount;
xEqpList = new string[xNum];
if (xNum != 0)
{
for (int i1 = 0; i1 < xNum; i1++)
{
xEqpList[i1] = myNGM.NGMPersonsCodeList[i1];
}
}
//Now, after checking the DATEs collision, we should check the TIMEs collision if they have.
if (checkTimeCollision(myHourFrom, myMinuteFrom, myHourTo, myMinuteTo, DateTime.Parse(dr[2].ToString()).Hour, DateTime.Parse(dr[2].ToString()).Minute, DateTime.Parse(dr[3].ToString()).Hour, DateTime.Parse(dr[3].ToString()).Minute))
{
for (int i1 = 0; i1 < xNum; i1++)
{
if (xEqpList[i1].Equals(eqpSerialNumber))
{
_AfishCode = dr[0].ToString();
xTemp = true;
break;
}
}
}
}
}
catch (Exception)
{
//End of while with exception! LOL
}
}
else
{
xTemp = false;
}
}
catch (Exception)
{
//MessageBox.Show("NGM ERRORRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR: ");
}
if (xTemp)
{
break;
}
#endregion
else
{
xTemp = false;
}
}
con.Close();
if (xTemp)
{
//collision found
return (true);
}
else
{
//collision not found
return (false);
}
}
//Check the times if they have collision in SIMPLE date!
private bool checkTimeCollision(int myHourFrom, int myMinuteFrom, int myHourTo, int myMinuteTo, int xHourFrom, int xMinuteFrom, int xHourTo, int xMinuteTo)
{
DateTime myFrom = new DateTime(2009, 9, 13, myHourFrom, myMinuteFrom, 0);
DateTime myTo = new DateTime(2009, 9, 13, myHourTo, myMinuteTo, 0);
DateTime xFrom = new DateTime(2009, 9, 13, xHourFrom, xMinuteFrom, 0);
DateTime xTo = new DateTime(2009, 9, 13, xHourTo, xMinuteTo, 0);
if ((myFrom >= xFrom) && (myFrom <= xTo) || ((myTo >= xFrom) && (myTo <= xTo)) || ((myFrom <= xFrom) && (myTo >= xTo)))
{
if (myTo == xFrom || myFrom == xTo)
{
return (false);
}
else
{
return (true);
}
}
else
{
return (false);
}
}
توضیح خاصی نیاز نمیبینم! مگر اینكه بگم چون این كد ها رو از توی پروژه ی خودم كپی كردم اینجا، شاید بعضی از مقادیر و كلاس هایی كه استفاده شده، براتون نامفهوم باشه! اصل ماجرا رو ولی براحتی میتونید برداشت كنید. ان شاء الله.
پاینده باشید و سرافراز.
یا علی مدد
سايتي كه معرفي كرديد خوب بود
اينم يك مرجع تقريبا كامل براي انواع مختلف connection string
http://connectionstrings.com
اميدوارم به كارتون بياد
ابتدا خاصیت CkeckBoxes رادر Listview برابر با True قرار دهید.سپس کدهای زیر را در متد رویداد ItemChecked بنویسید.
private int LastIndexChecked;
private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e)
{
if (listView1.CheckedIndices.Count==2)
{
//UnCheck before Item.
listView1.Items[LastIndexChecked].Checked = false;
//set Last index selected.
LastIndexChecked = listView1.CheckedIndices[0];
}
else
//for first step.
if(listView1.CheckedIndices.Count==1)
{
LastIndexChecked = listView1.CheckedIndices[0];
}
}
در c شارپ تابعی با نام Rename وجود ندارد یا حداقل من ندیدم.ولی می توانید برای Rename کردن از کد زیر استفاده کنید.
System.IO.File.Move("File Name", "New File Name");
توجه کنید که آدرس های File Name و New File Name باید یکسان باشد.
برای مثال عکسی با نام Picture1 را به Picture2 تغییر میدهیم:
System.IO.File.Move(@"C:\Picture1.jpg",@"C:\Picture2.jpg");
با سلام دیدم بعضی از دوستان با ایونت KeyPress در dataGridView مشکل داشتند کدشو اینجا قرار دادم
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.Control.KeyPress += DataGridKeyPress;
}
private void DataGridKeyPress(object sender, KeyPressEventArgs e)
{
}
آخرین ویرایش به وسیله Mahmoud.Afrad : پنج شنبه 29 اسفند 1392 در 22:46 عصر
در فرم ها می شه از تابع IsKeyLocked استفاده کرد.
IsKeyLocked(Keys.NumLock);
IsKeyLocked(Keys.CapsLock);
IsKeyLocked(Keys.Scroll);
و در console از خود کلاس Console
Console.NumberLock;
Console.CapsLock;
که از نوع بولی هستن.
این راهنما حتی می تواند به صورت فارسی تایپ شود وهنگام استفاده از یک متد شما را در درک و مقدار دهی آن راهنمایی میکند مانند متد ها وکلاس های خود مایکرو سافت
///<summary>
/// Provides more streamlined interface for associating a single or multiple extensions with a single program.
///</summary>
classAssociationManager
{
AssociationManager a = newAssociationManager();
///<summary>
/// Determines of the list of extensions are associated with the specified program id.
///</summary>
///<param name="progId">Program id to check against.</param>
///<param name="extensions">String array of extensions to check against the program id.</param>
///<returns>String array of extensions that were not associated with the program id.</returns>
publicstring[] CheckAssociation(string progId, paramsstring[] extensions)
}
.
.
.
{
به نظر کامل و روشنه این طور نیست؟
using System;
using System.Windows.Forms;
using System.Drawing;
namespace ButtonDClick
{
public class Form1 : System.Windows.Forms.Form
{
// Track the number of
// double-clicks with the count variable.
int count = 0;
public Form1()
{
InitializeComponent();
// Display OK button for closing.
this.MinimizeBox = false;
// Create an instance of the DoubleClickButton class.
DoubleClickButton dClickB = new DoubleClickButton();
dClickB.Bounds = new Rectangle(10,10,200,30);
dClickB.Text = "Double-click me!";
Controls.Add(dClickB);
// Add the DClick event hander to the DoubleClick event.
dClickB.DoubleClick += new EventHandler(DClick);
}
protected override void Dispose( bool disposing )
{
base.Dispose( disposing );
}
private void InitializeComponent()
{
this.Text = "Form1";
}
private void DClick(object o, EventArgs e)
{
// Display the number of double-clicks.
MessageBox.Show("Double-click count = " + ++count);
}
static void Main()
{
Application.Run(new Form1());
}
// Derive a button with extended funtionality
// from the Button class.
public class DoubleClickButton : System.Windows.Forms.Button
{
// Note that the DoubleClickTime property gets
// the maximum number of milliseconds allowed between
// mouse clicks for a double-click to be valid.
int previousClick = SystemInformation.DoubleClickTime;
public new event EventHandler DoubleClick;
protected override void OnClick(EventArgs e)
{
int now = System.Environment.TickCount;
// A double-click is detected if the the time elapsed
// since the last click is within DoubleClickTime.
if ( now - previousClick <= SystemInformation.DoubleClickTime)
{
// Raise the DoubleClick event.
if (DoubleClick != null)
DoubleClick(this,EventArgs.Empty);
}
// Set previousClick to now so that
// subsequent double-clicks can be detected.
previousClick = now;
// Allow the base class to raise the regular Click event.
base.OnClick(e);
}
// Event handling code for the DoubleClick event.
protected new virtual void OnDoubleClick(EventArgs e)
{
if (this.DoubleClick != null)
this.DoubleClick(this, e);
}
}
}
}