‏הצגת רשומות עם תוויות תכנות - כללי. הצג את כל הרשומות
‏הצגת רשומות עם תוויות תכנות - כללי. הצג את כל הרשומות

יום רביעי, 13 באוקטובר 2021

css

אתרים עם CSS ששווה להכיר:




יום חמישי, 22 בנובמבר 2018

כתיבה וטעינה של קבצי XML - שפת c#

כתיבה וטעינה של קבצי XML בשפת c#
ניתן לכתוב/לקרוא 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>

קונטרול webbrowser לגרסת Internet Explorer הכי גבוהה

כיצד להשתמש בקונטרול C# webbrowser שישתמש בגרסת internet explorer גבוהה (ולא גרסה 7 - ברירת מחדל)

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 גבוהה יותר:
/// <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
                                      \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;
   }
}

יום שני, 20 בנובמבר 2017

כיצד לתקשר בין צד c# אל צד js בתוך WebBrowser ולהיפך

פרויקט דוגמה להורדה

יש להוסיף בראש הדף (לפני המחלקה הראשונה) את הקוד הבא:
[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 }
  );
}

יום ראשון, 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); }
}

יום ראשון, 3 בינואר 2016

צל CSS באינטרנט אקספלורר 7 - WebBrowser בתוך c#

השמשתי בקונטרול WebBrowser בתוך תוכנת c# והיה צורך להציג צל (Shadow) ע"י CSS.
הבעיה היא שקונטרול כזה של סישארפ הוא גרסה 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_classbody.ie7 .shadow_classbody.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 שרצים במערכת נדע אם התוכנה כבר רצה
וכך נמנע מלהריץ אותה שוב -

הסרת ניקוד מטקסט


להלן קוד לקבלת מחרוזת תווים והסרת הניקוד ממחרוזת זו:

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();


שימוש בקוד זה נעשה למטרת עבודה עם טקסטים מנוקדים.
הרבה פעולות לא יכולות להיעשות על טקסט מנוקד, והפונקציה הנ"ל מסירה ניקוד ומאפשרת עבודה עם הטקסט.

יום שני, 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);
    }
}

יום רביעי, 13 באפריל 2011

(ASP) מיקום ושימוש ב-connectionString מתוך web.config

כאשר ניגשים לבסיס נתונים מתוך דף ASP, יש צורך להתקשר אליו עם connectionString.
כדאי שהמחרוזת הזאת תהיה מוגדרת במקום אחד בלבד, כל עמוד ייגש אליה ויקבל אותה משם, ואם נרצה לשנות יהיה עלינו לשנות רק במקום אחד:


קודם כל, בתוך web.config אפשר אולי למצוא תג של: </connectionStrings> ולהחליף אותו בזה, אם לא אז פשוט למקם חדש:
<connectionStrings>
    <add
    name="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

יום חמישי, 17 בפברואר 2011

מניעת סגירת טופס בלחיצה על X

ישנם מקרים בהם רוצים שבלחיצה על X הסגירה של התוכנית
התוכנה לא תיסגר אלא תמזער למשל לשורת המשימות של ווינדוס.

לשם כך יש להוסיף את הקוד הבא לתוכנית:

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

את כל זה הקוד עושה בעזרת משתנה בוליאני (אמת-שקר) בשם formClose 
איתו אפשר לקבוע לפני הסגירה של התוכנית אם היא אכן תיסגר או לא.
למשל, אם נרצה ונוסיף כפתור שאכן סוגר את התוכנה, אז נצטרך לכתוב לו:
formClose = true;
this.Close();

יום שלישי, 25 בינואר 2011

יצירת נקודת שיחזור בלחיצה - VB-script

קוד VB script עבור יצירת נקודת שחזור לווינדוס בלחיצה.
יש ליצור קובץ RestorePoint.vbs (או כל שם אחר במקום RestorePoint) ולהעתיק לתוכו את הכתוב כאן:

RestorePointName = inputBox("הכנס שם לנקודת השחזור")

If Len(RestorePointName)>0 Then
Set IRP = getobject("winmgmts:\\.\root\default:Systemrestore")
MYRP = IRP.createrestorepoint (RestorePointName, 0, 100)
msgBox ": נוצרה נקודת שחזור בשם" + vbCrLf + RestorePointName
End If

יום שישי, 12 בנובמבר 2010

קריאת קוד של דף או קובץ כלשהו באינטרנט, וכתיבה של קובץ במחשב

קריאת קוד של דף או קובץ כלשהו באינטרנט:
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;
}
ע"י StreamReader מבצעים גם קריאה של קובץ מהמחשב המקומי.

כתיבת תוכן של תיבת טקסט אל תוך קובץ והרצה של הקובץ:
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); }

יום שני, 11 באוקטובר 2010

יצירת User Control ושימוש ב-delegate


1) ניצור תוכנית רגילה Windows Application, ניתן שם לטופס ברירת המחדל: mainFrm.cs

2) לחיצה ימנית על solution, ואז addnew project → Windows Control Library
    ייווצר
User Control, נבחר ונשנה לו את השם – לדוגמה WCL, נוסיף לחצנים, תיבות וכדומה.

3) כעת ניתן להוסיף את הפרויקט WCL ב-reference של הטופס הראשי,
    אך כדי שיופיע גם ב-
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




שימוש ב-delegate
עד כאן יצרנו UserControl והוספנו אותו לטופס הראשי בתור פקד.


כדי ליצור תקשורת בין אותו פקד לטופס הראשי נשתמש ב-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 senderEventArgs e)
{
            onSendString(textBox1.Text);
           // strsent(textBox1.Text);
}


כפי שניתן לראות סימנתי בירוק את האפשרות השנייה להגדיר את שליחת המחרוזת, אולם נהוג להשתמש בדרך שכתובה קודם.


ניתן להוריד את ההסבר כולו להדפסה בתמונה: