הצגת רשומות עם תוויות תכנות - כללי. הצג את כל הרשומות
הצגת רשומות עם תוויות תכנות - כללי. הצג את כל הרשומות
יום רביעי, 13 באוקטובר 2021
יום חמישי, 22 בנובמבר 2018
כתיבה וטעינה של קבצי XML - שפת c#
כתיבה וטעינה של קבצי XML בשפת c#
ניתן לכתוב/לקרוא XML לכל סוג של מחלקה/אובייקט, גם אם יהיה זה אובייקט בסיסי (לדוגמה string) או מחלקה שנוצרה על-ידי המשתמש:
שימוש לדוגמה:
קובץ XML תוצאה:
ניתן לכתוב/לקרוא XML לכל סוג של מחלקה/אובייקט, גם אם יהיה זה אובייקט בסיסי (לדוגמה string) או מחלקה שנוצרה על-ידי המשתמש:
public class SnirXmlHandler
{
/// <summary>save xml</summary>
public static void Save<T>(T t, string filename)
{
try
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (TextWriter textWriter = new StreamWriter(filename))
{
serializer.Serialize(textWriter, t);
textWriter.Close();
}
}
catch (Exception ex) { throw; }
}
/// <summary>load xml file</summary>
public static T
Load<T>(string filename)
{
T t;
try
{
XmlSerializer deserializer = new XmlSerializer(typeof(T));
using (TextReader textReader = new StreamReader(filename))
{
t =
(T)deserializer.Deserialize(textReader);
textReader.Close();
}
}
catch (Exception ex) { throw; }
return t;
}
}
שימוש לדוגמה:
public class MyClass { public string Name { get; set; } public int[] Age { get; set; } public MyClass2 Mc2 { get; set; } } public class MyClass2 { public int[] Num { get; set; } } class Program { static void Main(string[] args) { MyClass myclass = new MyClass() { Name = "snir", Age = new int[] { 1, 2, }, Mc2 = new MyClass2 { Num = new int[] { 10, 45 } } }; SnirXmlHandler.Save(myclass, "snir.xml"); MyClass mc = SnirXmlHandler.Load ("snir.xml"); } }
קובץ XML תוצאה:
<myclass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <age> <name>snir</name> <age> <int>1</int> <int>2</int> </age> <mc2> <num> <int>10</int> <int>45</int> </num> </mc2> </myclass>
תוויות:
תכנות - כללי,
תכנות #C
קונטרול webbrowser לגרסת Internet Explorer הכי גבוהה
כיצד להשתמש בקונטרול C# webbrowser שישתמש בגרסת internet explorer גבוהה (ולא גרסה 7 - ברירת מחדל)
1. יש לגשת לתיקיה זו ברגיסטרי
ולשנות/להוסיף מפתח זה עבור כל תוכנה רצויה
1. יש לגשת לתיקיה זו ברגיסטרי
ולשנות/להוסיף מפתח זה עבור כל תוכנה רצויה
>HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
לערכים הבאים עבור גרסאות ie (בהתאמה לי המספר)
- 7000 , 8888, 9000, 10000, 11000 (standards-based !DOCTYPE directives)
- 8888, 9999, 10001, 11001 (regardless of the !DOCTYPE directive)
2. לאחר מכן, צריך להגדיר את internet explorer 11, לפי התמונות להלן:
(אפשרות זו אינה קיימת ב-internet explorer edge)
תרגום לעברית: הגדרות של תצוגת תאימות
יש אפשרות לעשות שהתוכנה תרשום את עצמה ברגיסטרי עבור שימוש בגרסה IE גבוהה יותר:
(אפשרות זו אינה קיימת ב-internet explorer edge)
תרגום לעברית: הגדרות של תצוגת תאימות
יש אפשרות לעשות שהתוכנה תרשום את עצמה ברגיסטרי עבור שימוש בגרסה IE גבוהה יותר:
/// <summary>
/// Set IE Version to registry.
/// Options: 8888, 9999, 10001, 11001 (regardless of the !DOCTYPE directive)
/// 7000, 8000, 9000, 10000, 11000 (standards-based !DOCTYPE directives)
/// </summary>
private void SetIeVersionInRegistery(string version)
{
try
{
string key_str = @"Software\Microsoft\Internet Explorer\
Main\FeatureControl
Main\FeatureControl
\FEATURE_BROWSER_EMULATION";
string exe_name = System.AppDomain.CurrentDomain.FriendlyName;
RegistryKey myKey = Registry.CurrentUser.OpenSubKey(key_str, true);
using (RegistryKey key = myKey.OpenSubKey(key_str, true))
{
if (myKey != null)
{
myKey.SetValue(exe_name, version, RegistryValueKind.DWord);
}
}
}
catch (Exception ex)
{
throw ex;
}
}
תוויות:
תכנות - כללי,
תכנות #C
יום שני, 20 בנובמבר 2017
כיצד לתקשר בין צד c# אל צד js בתוך WebBrowser ולהיפך
פרויקט דוגמה להורדה
יש להוסיף בראש הדף (לפני המחלקה הראשונה) את הקוד הבא:
בחלק Load של הדף יש להגדיר את WebBrowser ולצורך הדוגמה נכתוב בתוכו את ה-html:
נגדיר מתודה שתשלח מידע אל צד js:
יש להוסיף בראש הדף (לפני המחלקה הראשונה) את הקוד הבא:
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")] [ComVisible(true)]
//[ComVisibleAttribute(true)]
public partial class Form1 : Form
{ ... }
בחלק Load של הדף יש להגדיר את WebBrowser ולצורך הדוגמה נכתוב בתוכו את ה-html:
private void Form1_Load(object sender, EventArgs e)
{
// 4. Set the ObjectForScripting property in the
// form's constructor or a Load event handler.
// The following code uses the form class
// itself for the scripting object. // Component Object Model (COM) must be able
// to access the scripting object. // Use [ComVisible(true)] in order to make your
//form visible to COM
// (add the ComVisibleAttribute attribute to your form class). webBrowser1.ObjectForScripting = this;
webBrowser1.DocumentText =@"<html><head> <script>
// the js function to call from the c# side:
function myFoo(arg) { alert(arg); } </script> </head><body>send code to c# side: <br/> <input type='text' id='snir' value='snir send to c#'></input> <button onclick='window.external.Test(document.getElementById('snir').value)'> call client C# code from javscript code</button> </body> </html>";
}
נגדיר מתודה שתקבל את המיד מצד js:
// get message from the webpage's js [ComVisible(true)] public void Test(string arg) { MessageBox.Show(argt, "C# side"); }
נגדיר מתודה שתשלח מידע אל צד js:
private void SendToWebpage() { webBrowser1.Document.InvokeScript( "myFoo", new String[] { textBox1.Text } ); }
תוויות:
אינטרנט,
קוד,
תכנות - כללי,
תכנות #C
יום ראשון, 25 בדצמבר 2016
יצירת תיקיה זמנית בקבצי המערכת
כאשר נעשה שימוש בקבצים שנשמרים בתור Resources של התוכנה, ויש צורך
להעתיק אותם אל הכונן בשביל שימוש - תמונות למשל – קיימת כמובן האפשרות ליצור תיקיית-בת
בתוך תיקיית התוכנה, אך ניתן גם לעשות שימוש נוח יותר ולפרוס את הקבצים אל תוך
קבצי המערכת.
ראשית יש לשים לב להגדרות הבאות לקבצים:
-
Build Action:
Embedded Resources
-
Copy To
Output Directory: Do Not Copy
שלבי הביצוע:
1. יצירת
תיקיה עם שם אקראי כדי לשמור בתוכה את הקבצים
// Create a temp dirctory to save the images in:
string tempDirName = Path.Combine( Path.GetTempPath(),
System.Guid.NewGuid().ToString());
Directory.CreateDirectory(tempDirName);
2. חילוץ הקבצים מתוך האסמבלי
//Extract the images from the assembly resources
System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
// You can get the images path in embedded resources by
watching:
string
file = myAssembly.GetManifestResourceNames()[0];
3. שמירת כל קובץ (תמונה)
בתיקיה הזמנית שיצרנו
using (Stream myStream =
myAssembly.GetManifestResourceStream(file))
{
using (Stream file_stream = File.Create(file)) {
CopyStream(myStream,
file_stream);
}
}
private static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8 * 1024];
int len;
while ((len = input.Read(buffer,
0, buffer.Length)) > 0) {
output.Write(buffer, 0, len);
}
}
4. לא נשכח למחוק את הקבצים ביציאה מהתוכנה
private static void Form1_Closing(object sender, FormClosingEventArgs e)
{
try {
Directory.Delete(tempDirName,
true);
}
catch(Exception ex) { MessageBox.Show(ex.Message); }
}
תוויות:
קוד,
תכנות - כללי,
תכנות #C
יום ראשון, 3 בינואר 2016
צל CSS באינטרנט אקספלורר 7 - WebBrowser בתוך c#
השמשתי בקונטרול WebBrowser בתוך תוכנת c# והיה צורך להציג צל (Shadow) ע"י CSS.
הבעיה היא שקונטרול כזה של סישארפ הוא גרסה 7 - ולא תומך CSS-3
אז:
איך להציג צל באינטרנט אקספלורר 7 (דפדפן של קונטרול webbrowser בתוך c#):
הבעיה היא שקונטרול כזה של סישארפ הוא גרסה 7 - ולא תומך CSS-3
אז:
איך להציג צל באינטרנט אקספלורר 7 (דפדפן של קונטרול webbrowser בתוך c#):
לצורך העניין, השתמשתי בטבלה <table> אותה מיקמתי בתוך span.
ראה הפניה:
קוד:
<html>
<head>
<style>
.shadow_class{
border: 1px solid red;
box-shadow: 0 0 55px #cccccc;
-webkit-box-shadow: 0 0 55px #cccccc;
-moz-box-shadow: 0 0 55px #cccccc;
}
body.ie6 .shadow_class, body.ie7 .shado w_class, body.ie8 .shadow_ class {
zoom: 1;
filter: /*progid:DXImageTransform. Microsoft.Shadow(Color=# cccccc, Strength=15, Direction=0),*//*top*/
progid:DXImageTransform. Microsoft.Shadow(Color=# cccccc, Strength=15, Direction=90),/*right*/
progid:DXImageTransform. Microsoft.Shadow(Color=# cccccc, Strength=25, Direction=180),/*bottom*/
progid:DXImageTransform. Microsoft.Shadow(Color=# cccccc, Strength=15, Direction=270);/*left*/
}
table{
background-color: white;
}
</style>
</head>
<body class="ie7">
<span class="shadow_class">
<table border="1">
<tr><th>Header 1</th><th>Header 2</th></tr>
<tr><td>row 1 col 1</td><td>row 1 col 2</td></tr>
</table>
</span>
</body>
</html>
תוויות:
תכנות - כללי
יום רביעי, 7 בספטמבר 2011
יום שני, 20 ביוני 2011
מניעת הרצת תוכנה ביותר מעותק אחד
ע"י חיפוש בין כל ה-Proccess שרצים במערכת נדע אם התוכנה כבר רצה
וכך נמנע מלהריץ אותה שוב -
וכך נמנע מלהריץ אותה שוב -
תוויות:
תכנות - כללי,
תכנות #C
הסרת ניקוד מטקסט
להלן קוד לקבלת מחרוזת תווים והסרת הניקוד ממחרוזת זו:
static String RemoveDiacritics(String s){String normalizedString = s.Normalize(NormalizationForm.FormD);StringBuilder stringBuilder = new StringBuilder();for (int i = 0; i < normalizedString.Length; i++){Char c = normalizedString[i];if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)stringBuilder.Append(c);}return stringBuilder.ToString();}
שימוש בקוד זה נעשה למטרת עבודה עם טקסטים מנוקדים.
הרבה פעולות לא יכולות להיעשות על טקסט מנוקד, והפונקציה הנ"ל מסירה ניקוד ומאפשרת עבודה עם הטקסט.
תוויות:
תכנות - כללי,
תכנות #C
יום שני, 13 ביוני 2011
(ASP) בניית דינמית של טבלה
void InsertTableRow(int row, int col)
{
for(int i=0; i<row; i++)
{
TableRow tr = new TableRow();
TableCell tcel;
for(int i=0; i<col; i++)
{
tcel = new TableCell();
tcel.Text = "";
tr.Cells.Add(tcel);
}
TableScore.Rows.Add(tr);
}
}
תוויות:
תכנות - כללי,
תכנות #C,
ASP
יום רביעי, 13 באפריל 2011
(ASP) מיקום ושימוש ב-connectionString מתוך web.config
כאשר ניגשים לבסיס נתונים מתוך דף ASP, יש צורך להתקשר אליו עם connectionString.
כדאי שהמחרוזת הזאת תהיה מוגדרת במקום אחד בלבד, כל עמוד ייגש אליה ויקבל אותה משם, ואם נרצה לשנות יהיה עלינו לשנות רק במקום אחד:
קודם כל, בתוך web.config אפשר אולי למצוא תג של: </connectionStrings> ולהחליף אותו בזה, אם לא אז פשוט למקם חדש:
כאן השתמשתי ב-return ' אפשר בכל דרך אחרת שתרצו.
מי שיירצה VB.NET:
כדאי שהמחרוזת הזאת תהיה מוגדרת במקום אחד בלבד, כל עמוד ייגש אליה ויקבל אותה משם, ואם נרצה לשנות יהיה עלינו לשנות רק במקום אחד:
קודם כל, בתוך web.config אפשר אולי למצוא תג של: </connectionStrings> ולהחליף אותו בזה, אם לא אז פשוט למקם חדש:
<connectionStrings><addname="myServerName"connectionString="Data Source=SNIR-LAPTOP\SQLEXPRESS;Initial Catalog=project;Integrated Security=True"providerName="System.Data.SqlClient"/></connectionStrings>
לאחר מכן בתוכנית עצמה (דף #C) אפשר לקבל את הערך שהגדרנו כאן ע"י:
return ConfigurationManager.ConnectionStrings["myServerName"].ConnectionString;
כאן השתמשתי ב-return ' אפשר בכל דרך אחרת שתרצו.
מי שיירצה VB.NET:
Dim conString = ConfigurationManager.ConnectionStrings("MyServerName")Dim strConnString As String = conString.ConnectionString
תוויות:
תכנות - כללי,
תכנות #C
יום חמישי, 17 בפברואר 2011
מניעת סגירת טופס בלחיצה על X
ישנם מקרים בהם רוצים שבלחיצה על X הסגירה של התוכנית
התוכנה לא תיסגר אלא תמזער למשל לשורת המשימות של ווינדוס.
לשם כך יש להוסיף את הקוד הבא לתוכנית:
את כל זה הקוד עושה בעזרת משתנה בוליאני (אמת-שקר) בשם formClose
איתו אפשר לקבוע לפני הסגירה של התוכנית אם היא אכן תיסגר או לא.
התוכנה לא תיסגר אלא תמזער למשל לשורת המשימות של ווינדוס.
לשם כך יש להוסיף את הקוד הבא לתוכנית:
bool formClose = false;
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
if (formClose == false)
{
//cancels the closing event
e.Cancel = true;
//hides the window
this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
this.Hide();
}
}
אפשר להבין שהקוד 'משכתב' - override את אירוע הסגירה של התוכנה, ובמקום לסגור אותו ממזער אותו.
בשביל מיזעור לשורת המשימות - http://snir.blogspot.com/2010/10/minimize-window-to-tray.html
בשביל מיזעור לשורת המשימות - http://snir.blogspot.com/2010/10/minimize-window-to-tray.html
את כל זה הקוד עושה בעזרת משתנה בוליאני (אמת-שקר) בשם formClose
איתו אפשר לקבוע לפני הסגירה של התוכנית אם היא אכן תיסגר או לא.
למשל, אם נרצה ונוסיף כפתור שאכן סוגר את התוכנה, אז נצטרך לכתוב לו:
formClose = true;
this.Close();
תוויות:
תכנות - כללי,
תכנות #C
יום שלישי, 25 בינואר 2011
יצירת נקודת שיחזור בלחיצה - VB-script
קוד VB script עבור יצירת נקודת שחזור לווינדוס בלחיצה.
יש ליצור קובץ RestorePoint.vbs (או כל שם אחר במקום RestorePoint) ולהעתיק לתוכו את הכתוב כאן:
יש ליצור קובץ RestorePoint.vbs (או כל שם אחר במקום RestorePoint) ולהעתיק לתוכו את הכתוב כאן:
RestorePointName = inputBox("הכנס שם לנקודת השחזור")
If Len(RestorePointName)>0 Then
If Len(RestorePointName)>0 Then
Set IRP = getobject("winmgmts:\\.\root\default:Systemrestore")
MYRP = IRP.createrestorepoint (RestorePointName, 0, 100)
msgBox ": נוצרה נקודת שחזור בשם" + vbCrLf + RestorePointName
End If
End If
תוויות:
תכנות - כללי
יום שישי, 12 בנובמבר 2010
קריאת קוד של דף או קובץ כלשהו באינטרנט, וכתיבה של קובץ במחשב
קריאת קוד של דף או קובץ כלשהו באינטרנט:
כתיבת תוכן של תיבת טקסט אל תוך קובץ והרצה של הקובץ:
ע"י StreamReader מבצעים גם קריאה של קובץ מהמחשב המקומי.string ReadUrlCode(string url){HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);HttpWebResponse res = (HttpWebResponse)req.GetResponse();StreamReader sr = new StreamReader(res.GetResponseStream());string str = sr.ReadToEnd();res.Close();sr.Close();return str;}
כתיבת תוכן של תיבת טקסט אל תוך קובץ והרצה של הקובץ:
void WriteToFile(string filepath) { StreamWriter sw = new StreamWriter(filepath); try { sw.Write(richTextBox1.Text); } catch { } finally { sw.Close(); } //running the file System.Diagnostics.Process.Start(filepath); }
תוויות:
תכנות - כללי,
תכנות #C
יום שני, 11 באוקטובר 2010
יצירת User Control ושימוש ב-delegate
1) ניצור תוכנית רגילה Windows Application, ניתן שם לטופס ברירת המחדל: mainFrm.cs
2) לחיצה ימנית על solution, ואז add → new project → Windows Control Library
ייווצר User Control, נבחר ונשנה לו את השם – לדוגמה WCL, נוסיף לחצנים, תיבות וכדומה.
ייווצר User Control, נבחר ונשנה לו את השם – לדוגמה WCL, נוסיף לחצנים, תיבות וכדומה.
3) כעת ניתן להוסיף את הפרויקט WCL ב-reference של הטופס הראשי,
אך כדי שיופיע גם ב-Toolbox נעשה build לפחות ל-WCL.
אך כדי שיופיע גם ב-Toolbox נעשה build לפחות ל-WCL.
4) לחיצה ימנית על reference שנמצא בבלוק של הטופס הראשי, נבחר Add Reference….
נוסיף את ההפניה לפרויקט שיצרנו בלשונית Projects או נבחר קובץ dll חיצוני בלשונית Browse
5) UserControl שיצרנו אמור להופיע ב-Toolbox.
אם לא, נוסיף אותו ע"י לחיצה ימנית ← Choose Items ← לשונית Net Framework ←נלחץ Browse
ונבחר בקובץ ה-dll שנמצא בפרויקט, בדרך כלל ב- ProjectName/SolutionName/bin/debug
או במקרה שלנו: UcApp/UcApp/bin/debug
אם לא, נוסיף אותו ע"י לחיצה ימנית ← Choose Items ← לשונית Net Framework ←נלחץ Browse
ונבחר בקובץ ה-dll שנמצא בפרויקט, בדרך כלל ב- ProjectName/SolutionName/bin/debug
או במקרה שלנו: UcApp/UcApp/bin/debug
עד כאן יצרנו UserControl והוספנו אותו לטופס הראשי בתור פקד.
כדי ליצור תקשורת בין אותו פקד לטופס הראשי נשתמש ב-delegate :
כדי ליצור תקשורת בין אותו פקד לטופס הראשי נשתמש ב-delegate :
(את הקוד הבא נוסיף בתוך ה-UserControl)
public delegate void mydelegate(string s);
public event mydelegate strsent;
public virtual void onSendString(string s)
{
strsent(s);
}
נלך לטופס הראשי, נבחר ב-WCL שמיקמנו בטופס, נבחר ב-Properties ואז נבחר בצורת הברק כדי להיכנס להגדרת 'Events' ונמצא את השם שהגדרנו ל-Event שיצרנו - כלומר strsent .
נלחץ לחיצה כפולה ובתוכו נגדיר אילו פעולות יתבצעו על המחרוזת שנקבל בהתרחש האירוע. למשל:
(הקוד הבא נמצא בטופס הראשי)
private void userControl11_strsent(string s)
{
MessageBox.Show(s);
}
עד כאן הגדרנו לטופס הראשי שבהתקבל מחרוזת מתוך הפקד WCL שהגדרנו, אזי תוקפץ הודעה עם המחרוזת.
כעת עלינו לקשר בין הכפתור שנמצא ב-WCL לבין שליחת המחרוזת:
(הקוד הבא נמצא ב-UserControl)
private void button1_Click(object sender, EventArgs e)
{
onSendString(textBox1.Text);
// strsent(textBox1.Text);
}
כפי שניתן לראות סימנתי בירוק את האפשרות השנייה להגדיר את שליחת המחרוזת, אולם נהוג להשתמש בדרך שכתובה קודם.
ניתן להוריד את ההסבר כולו להדפסה בתמונה:
תוויות:
תכנות - כללי,
תכנות #C
הירשם ל-
רשומות (Atom)