Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Διάφορες function που έχω ανακαλήψει ή γράψει και μπορεί να φανούν χρήσιμες.

Îåêßíçóå áðü ôï ìÝëïò Chrysostomos Kolovos. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 27-11-2008, 18:31. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  26-11-2008, 18:30 46485

    Διάφορες function που έχω ανακαλήψει ή γράψει και μπορεί να φανούν χρήσιμες.

    Είπα να βάλω ένα λιθαρακι και γω...

    Για επεξηγήσεις ρωτήστε τι θέλετε...

    Αν έχει κάποιος κατι καλήτερο ας το παραθέσει...

    Imports Microsoft.VisualBasic

    Public Class myFunctions

    'H gnosti stripTags gia vb
    Public Function StripHTML(ByVal HTMLCode As String) As String

    Dim htmlTags() As String
    Dim pos1, pos2, temp As Integer
    Dim tagText As String

    htmlTags = Split("!--;!DOCTYPE;A;ABBR;ACRONYM;ADDRESS;APPLET;AREA;B;BASE;BASEFONT;BDO;BIG;BLOCKQUOTE;" _
    & "BODY;BR;BUTTON;CAPTION;CENTER;CITE;CODE;COL;COLGROUP;DD;DEL;DFN;DIR;DIV;DL;DT;EM;" _
    & "FIELDSET;FONT;FORM;FRAME;FRAMESET;H1;H2;H3;H4;H5;H6;HEAD;HR;HTML;I;IFRAME;IMG;INPUT;" _
    & "INS;ISINDEX;KBD;LABEL;LEGEND;LI;LINK;MAP;MENU;META;NOFRAMES;NOSCRIPT;OBJECT;OL;" _
    & "OPTGROUP;OPTION;P;PARAM;PRE;Q;S;SAMP;SCRIPT;SELECT;SMALL;SPAN;STRIKE;STRONG;STYLE;" _
    & "SUB;SUP;TABLE;TBODY;TD;TEXTAREA;TFOOT;TH;THEAD;TITLE;TR;TT;U;UL;VAR;XMP", ";")


    pos1 = InStr(HTMLCode, "<")

    While pos1 > 0
    pos2 = InStr(pos1 + 1, HTMLCode, ">")

    temp = InStr(pos1 + 1, HTMLCode, "<")
    If temp > 0 And temp < pos2 Then
    pos1 = temp
    End If


    tagText = HTMLCode.Substring(pos1, pos2 - pos1 - 1)

    For index As Integer = 0 To htmlTags.Length - 1
    If tagText.ToUpper.StartsWith(htmlTags(index)) Or tagText.ToUpper.EndsWith(htmlTags(index)) Then
    HTMLCode = Left(HTMLCode, pos1 - 1) & Mid(HTMLCode, pos2 + 1)
    pos2 = pos1
    Exit For
    End If
    Next

    pos1 = InStr(pos2, HTMLCode, "<")

    End While

    Return HTMLCode

    End Function

    'Dineis ena Boolean kai an einai xrimata kai sto epistrefei sti morfi 1.000.000 me € i xoris analoga to isMoney
    Public Function NumberWithSymbols(ByVal val As Object, ByVal isMoney As Boolean) As String
    If val Is DBNull.Value Then Return "0,00"
    If CStr(val) = String.Empty Then Return "0,00"
    val = Replace(CStr(val), ".", ",")

    If isMoney = True Then
    Return CDec(val).ToString("N", Globalization.CultureInfo.CurrentCulture.NumberFormat) & " €"
    Else
    Return CDec(val).ToString("N", Globalization.CultureInfo.CurrentCulture.NumberFormat)
    End If

    End Function



    'Klidonei ti forma mazi me tis apokatw
    Public Class Security

    Public Sub LockDownPage(ByVal Page As System.Web.UI.Page, Optional ByVal Access As String = "R")
    Dim mycontrol As Control
    For Each mycontrol In Page.Controls
    If Access = "R" Then
    IterateControl(mycontrol, True)
    ElseIf Access = "W" Or Access = "A" Then
    IterateControl(mycontrol, False)
    End If
    Next
    End Sub

    'routine to iterate through all controls on the page.
    Private Sub IterateControl(ByVal controlObject As Control, _
    ByVal Lock As Boolean)
    Dim currentControl As Control

    If Lock Then
    LockDown(controlObject)
    Else
    LockDown(controlObject, True)
    End If
    For Each currentControl In controlObject.Controls

    IterateControl(currentControl, Lock)


    Next
    End Sub

    'lockdown routine, checks control type and applies appropriate disable action.

    Private Sub LockDown(ByVal UIControl As Control, _
    Optional ByVal ControlEnabled As Boolean = False)
    Try
    Select Case UIControl.GetType.Name
    Case "TextBox"
    If UIControl.ID = "txtNeedToConfirm2" Then
    CType(UIControl, _
    Web.UI.WebControls.TextBox).Enabled = ControlEnabled
    Else
    CType(UIControl, _
    Web.UI.WebControls.TextBox).Enabled = ControlEnabled
    End If
    Case "DropDownList"
    CType(UIControl, _
    Web.UI.WebControls.DropDownList).Enabled = ControlEnabled
    Case "RadioButtonList"
    CType(UIControl, _
    Web.UI.WebControls.RadioButtonList).Enabled = ControlEnabled
    Case "CheckBox"
    CType(UIControl, _
    Web.UI.WebControls.CheckBox).Enabled = ControlEnabled
    Case "HtmlTextArea"
    CType(UIControl, _
    Web.UI.HtmlControls.HtmlTextArea).Disabled = Not ControlEnabled
    'Case "Hyperlink"
    ' CType(UIControl, _
    ' Web.UI.WebControls.HyperLink).Visible = ControlEnabled
    Case "LinkButton"
    If UIControl.ID = "lnkDelete" Then
    CType(UIControl, _
    Web.UI.WebControls.LinkButton).Enabled = ControlEnabled
    End If
    Case "CheckBoxList"
    CType(UIControl, _
    Web.UI.WebControls.CheckBoxList).Enabled = ControlEnabled
    End Select
    Catch ex As Exception
    End Try
    End Sub
    End Class

    'Briskei ena control sti forma
    Public Shadows Function FindControl(ByVal id As String, ByRef page As UI.Page) As Control
    Return FindControl(Of Control)(page, id)
    End Function

    Public Shared Shadows Function FindControl(Of T As Control)(ByVal startingControl As Control, ByVal id As String) As T
    Dim found As Control = startingControl
    If (String.IsNullOrEmpty(id) OrElse (found Is Nothing)) Then Return CType(Nothing, T)
    If String.Compare(id, found.ID) = 0 Then Return found
    For Each ctl As Control In startingControl.Controls
    found = FindControl(Of Control)(ctl, id)
    If (found IsNot Nothing) Then Return found
    Next
    Return CType(Nothing, T)
    End Function


    End Class



  •  26-11-2008, 18:32 46486 σε απάντηση της 46485

    Απ: Διάφορες function που έχω ανακαλήψει ή γράψει και μπορεί να φανούν χρήσιμες.

    Έχει bug o Html editor, μου χάλασε τα Tabs.


  •  26-11-2008, 23:01 46489 σε απάντηση της 46486

    Απ: Διάφορες function που έχω ανακαλήψει ή γράψει και μπορεί να φανούν χρήσιμες.

    Αυτά που κάνεις μπορούν να γίνουν πολύ ευκολότερα με τις λειτουργίες που υπάρχουν ήδη στο .NET. Για παράδειγμα, μπορείς να χρησιμοποιήσεις την String.Format για να δημιουργήσεις οποιοδήποτε string με το format που θέλεις, χωρίς να σε απασχολούνε τα , και τα . . Για παράδειγμα, μπορείς με ένα text = String.Format("{0:C}", numberValue) να μετατρέψεις οποιαδήποτε τιμή σε string με currency format, δηλαδή με 2 δεκαδικά και το σύμβολο νομίσματος που έχει ορίσει ο χρήστης. Αν θέλεις να λάβεις υπόψη και τα null, κάνεις το

    Dim aValue As Object
    aValue = DBNull.Value
    Dim numberValue As Object = IIf(IsDBNull(aValue), 0, aValue)
    Dim text As String = String.Format("{0:C}", numberValue)

    Όσον αφορά την FindControl, υπάρχει ήδη FindControl. Στην LockDown, δεν χρειάζονται όλες αυτές οι μετατροπές καθώς το Enabled property ορίζεται στην WebControl κλάση από την οποία κληρονομούνε όλες οι άλλες. Απλά γράφεις ένα

    Dim wControl As WebControl = TryCast(aControl, WebControl)
    If Not wControl Is Nothing Then
    wControl.Enabled = False
    End If

    Μπορείς να πιάσεις και τα HtmlControls ως εξής

    Private Sub CascadeEnable(ByVal root As Control, ByVal enabled As Boolean)
    Dim wControl As WebControl = TryCast(root, WebControl)
    Dim hControl As HtmlControl = TryCast(root, HtmlControl)
    If Not wControl Is Nothing Then
    wControl.Enabled = enabled
    ElseIf Not hControl Is Nothing Then
    hControl.Disabled = Not enabled
    End If
    For Each child As Control In root.Controls
    CascadeEnable(child, enabled)
    Next
    End Sub

    Ακόμα καλύτερα, μπορείς να χρησιμοποιήσεις delegates για να φτιάξεις μία IterateControl η οποία θα εκτελεί σε κάθε control τον κώδικα που θα δώσεις εσύ

    Delegate Sub ControlFlagDelegate(ByVal aControl As Control, ByVal flag As Boolean)

    Private Sub IterateControl(ByVal root As Control, ByVal code As ControlFlagDelegate, ByVal flag As Boolean)
    code(root, flag)
    For Each child As Control In root.Controls
    IterateControl(child, code, flag)
    Next
    End Sub

    Private Sub EnableControl(ByVal aControl As Control, ByVal enabled As Boolean)
    Dim wControl As WebControl = TryCast(aControl, WebControl)
    Dim hControl As HtmlControl = TryCast(aControl, HtmlControl)
    If Not wControl Is Nothing Then
    wControl.Enabled = enabled
    ElseIf Not hControl Is Nothing Then
    hControl.Disabled = Not enabled
    End If
    End Sub


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    IterateControl(Me, AddressOf Me.EnableControl, False)

    End Sub

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  27-11-2008, 14:15 46527 σε απάντηση της 46489

    Απ: Διάφορες function που έχω ανακαλήψει ή γράψει και μπορεί να φανούν χρήσιμες.

    Πολύ ενδιαφέροντα, δεν είχα κάτσει να σκεφτώ να τις βελτιώσω και μου δίνει τροφή για σκέψη.Η υλοποίηση με Delegate φενεται πολύ ενδιαφέρουσα.

    Πάντως δεν είναι τρομερό που δεν υπαρχει στο .net μια striptags function;

    Θα θελα να δώ και για άλλα θέματα functions αν έχει κάποιος κάτι, ας είναι η αρχή εδώ.






  •  27-11-2008, 18:31 46531 σε απάντηση της 46527

    Απ: Διάφορες function που έχω ανακαλήψει ή γράψει και μπορεί να φανούν χρήσιμες.

    Δεν είναι καθόλου περίεργο. Μπορείς να πετύχεις αυτό που θες σε απλές περιπτώσεις με regular expressions, π.χ. με το Regex.Replace(text, ”<(.|\n)*?>”, string.Empty) . Aπό την άλλη, η HTML έχει μυστήρια σύνταξη και μπορούν να σου ξεφύγουν εύκολα κάποια tags, άσε που πάντα μπορεί κάποιος αντί για < να βάλει το αντίστοιχο HTML encoded χαρακτήρα (τον οποίο δεν θυμάμαι απέξω). 

    Αν ο σκοπός σου είναι απλά να καθαρίσεις όσα σου δίνει ο χρήστης για να αποφύγεις π.χ. κάποια bold να πεταχτούν στη μέση ενός κειμένου, τα απλά regular expressions θα κάνουν καλή δουλειά. Άν όμως θέλεις να αποφύγεις κακόβουλο HTML και javascript, δεν θα σε βοηθήσουν.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems