Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 26
  1. #11
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Ciao a tutti!
    era da un pò che non passavo di qui, poi ho visto questo post e mi pareva giusto rispondere a Pietro che mi è simpatico (ciao Pietro).

    questo codice crea un controllo (datagrid) che inserisce le righe copiate da un excel (testato con excel 2007). Quando si passa sopra il controllo con il mouse nell'angolo dx basso appare un immagine (da importare nel progetto) che consente, facendoci click sopra, di importare il contenuto testuale degli appunti. l'immagine rimane per 4 secondi poi scompare con animazione (anche quando si esce dal controllo scompare, e ricompare quando si rientra sempre per 4 secondi con animazione), a meno che non si posizioni il mouse sopra di esso, ricompare anche quando si porta il mouse nell'angolo dx basso del controllo e riscompare quando si esce da esso. Credo sia meglio provare per capire, ma vedrai che quando serve c'è e quando non serve no! . è possibile copiare anche le colonne oltre i dati, oppure se non vengono copiati anche i nomi delle colonne si può optare per non visualizzarle (IncludeHeader = false).
    Per questo controllo è necessari che l'utente accetti (tramite messageBox di silverlight) che il controllo possa accedere alla clipboard (impostazioni di sicurezza di SL), ma può mettere il check per non chiedere più questa impostazione.

    ecco finalmente il codice, divertiti

    code behind (MainPage.xaml.cs)

    codice:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Text.RegularExpressions;
    using System.Windows.Data;
    using System.Windows.Threading;
    using System.Windows.Input;
    
    namespace ClipboardGrab
    {
        public partial class MainPage : UserControl
        {
            bool IncludeHeader;
            DispatcherTimer myDispatcherTimer = new DispatcherTimer();
            public MainPage()
            {
                InitializeComponent();
                //Imposta il tempo in cui rimane visibile il bottone per incollare
                myDispatcherTimer.Interval = new TimeSpan(0, 0, 0, 4);
                myDispatcherTimer.Tick += new EventHandler(myDispatcherTimer_Tick);
                //true se quando si copia sono incluse i nomi delle colonne
                IncludeHeader = true; ;
            }
    
            void myDispatcherTimer_Tick(object sender, EventArgs e)
            {
                ButtonOpacityDown.Begin();
                myDispatcherTimer.Stop();
            }
    
            private void dataGrid2_MouseEnter(object sender, MouseEventArgs e)
            {
                ButtonOpacityUp.Begin();
                myDispatcherTimer.Start();
            }
    
            private void dataGrid2_MouseLeave(object sender, MouseEventArgs e)
            {
                this.button1.Opacity = 0;
                myDispatcherTimer.Stop();
            }
    
            private void Image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                dataGrid2.Columns.Clear();
                var txt = Clipboard.GetText();
                var rows = Regex.Split(txt, @"\r\n");
                var columns = Regex.Split(rows[0], @"\t");
                List<Row> table = new List<Row>();
                for (int i = 0; i < rows.Length - 1; i++)
                {
                    Row row = new Row();
                    string[] items = Regex.Split(rows[i], @"\t");
                    for (int y = 0; y < columns.Length; y++)
                    {
                        if (i < 1)
                        {
                            this.dataGrid2.Columns.Add(new DataGridTextColumn()
                            {
                                Binding = new Binding(string.Format("[{0}]", columns[y])),
                                Header = IncludeHeader ? columns[y] : string.Empty,
                                Width = DataGridLength.Auto
                            });
                            if (!IncludeHeader) row[columns[y]] = items[y];
                        }
                        else
                        {
                            row[columns[y]] = items[y];
                        }
                    }
                    if (i > 0||!IncludeHeader) table.Add(row);
                }
                this.dataGrid2.ItemsSource = table;
            }
    
            private void button1_MouseEnter(object sender, MouseEventArgs e)
            {
                ButtonOpacityDown.Stop();
                this.myDispatcherTimer.Stop();
                this.button1.Opacity = 1;
            }
    
            private void button1_MouseLeave(object sender, MouseEventArgs e)
            {
                ButtonOpacityDown.Begin();
            }
        }
        
        public class Row
        {
            private Dictionary<string, object> columns = new Dictionary<string, object>();
    
            public object this[string ColumnName]
            {
                get
                {
                    if (columns.ContainsKey(ColumnName))
                        return columns[ColumnName];
                    else
                        return null;
                }
    
                set
                {
                    if (columns.ContainsKey(ColumnName))
                        columns[ColumnName] = value;
                    else
                        columns.Add(ColumnName, value);
                }
            }
    
            public IEnumerable<string> Keys { get { return columns.Keys; } }
        }
    }
    xaml (MainPage.xaml)

    codice:
    <UserControl x:Class="ClipboardGrab.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" MouseEnter="dataGrid2_MouseEnter" MouseLeave="dataGrid2_MouseLeave">
        <UserControl.Resources>
            <Storyboard x:Name="ButtonOpacityUp">
                <DoubleAnimation
                    Storyboard.TargetName="button1"
                    Storyboard.TargetProperty="Opacity"
                    From="0.0" To="1.0" Duration="0:0:1" 
                    AutoReverse="False"/>
            </Storyboard>
            <Storyboard x:Name="ButtonOpacityDown">
                <DoubleAnimation
                    Storyboard.TargetName="button1"
                    Storyboard.TargetProperty="Opacity"
                    From="1.0" To="0.0" Duration="0:0:1" 
                    AutoReverse="False"/>
            </Storyboard>
        </UserControl.Resources>
        <Grid x:Name="LayoutRoot" Background="White">        
            <sdk:DataGrid AutoGenerateColumns="False" Name="dataGrid2" >
            </sdk:DataGrid>
            <Image Source="/ClipboardGrab;component/Images/1350629552_edit-paste.png" MouseEnter="button1_MouseEnter" MouseLeave="button1_MouseLeave" MouseLeftButtonDown="Image_MouseLeftButtonDown" Height="40" Name="button1" HorizontalAlignment="Right" VerticalAlignment="Bottom"/>
            
        </Grid>
    </UserControl>

  2. #12
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Ti ringrazio

    adesso provo a divertirmi

    Pietro

  3. #13
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Figurati, se hai problemi sono qui

  4. #14
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da U235
    Figurati, se hai problemi sono qui
    Tanto per non buttarmi a testa bassa nel codice, a me interessa il Paste, non il Copy.

    Continuo a "divertirmi"?

    Pietro

  5. #15
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Dal foglio di excel verso la pagina, giusto?

  6. #16
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Si, verso una pagina aspx


    ps. che codice è? forse sono rimasto un po' indietro in questo campo

    Pietro

  7. #17
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Originariamente inviato da pietro09
    Si, verso una pagina aspx


    ps. che codice è? forse sono rimasto un po' indietro in questo campo

    devi creare un progetto Silverlight e includere il controllo nella tua pagina. Un pò come si fa con flash.

    quando crei il progetto ti trovi la pagina .xaml che contiene la parte di metadati dove devi appunto mettere lo xaml, poi nella pagina .xaml.cs metti il codice c#.

    una volta compilato dovrai mettere il file .xap generato nella cartella ClientBin, e nella pagina aspx usi un codice simile a questo :

    codice:
    <%@ Page Language="C#" AutoEventWireup="true" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>ClipboardGrab</title>
        <style type="text/css">
        html, body {
    	    height: 100%;
    	    overflow: auto;
        }
        body {
    	    padding: 0;
    	    margin: 0;
        }
        #silverlightControlHost {
    	    height: 100%;
    	    text-align:center;
        }
        </style>
        <script type="text/javascript" src="Silverlight.js"></script>
        <script type="text/javascript">
            function onSilverlightError(sender, args) {
                var appSource = "";
                if (sender != null && sender != 0) {
                  appSource = sender.getHost().Source;
                }
                
                var errorType = args.ErrorType;
                var iErrorCode = args.ErrorCode;
    
                if (errorType == "ImageError" || errorType == "MediaError") {
                  return;
                }
    
                var errMsg = "Errore non gestito nell'applicazione Silverlight " +  appSource + "\n" ;
    
                errMsg += "Codice: "+ iErrorCode + "    \n";
                errMsg += "Categoria: " + errorType + "       \n";
                errMsg += "Messaggio: " + args.ErrorMessage + "     \n";
    
                if (errorType == "ParserError") {
                    errMsg += "File: " + args.xamlFile + "     \n";
                    errMsg += "Riga: " + args.lineNumber + "     \n";
                    errMsg += "Posizione: " + args.charPosition + "     \n";
                }
                else if (errorType == "RuntimeError") {           
                    if (args.lineNumber != 0) {
                        errMsg += "Riga: " + args.lineNumber + "     \n";
                        errMsg += "Posizione: " +  args.charPosition + "     \n";
                    }
                    errMsg += "MethodName: " + args.methodName + "     \n";
                }
    
                throw new Error(errMsg);
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server" style="height:100%">
        <div id="silverlightControlHost">
            <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
    		  <param name="source" value="ClientBin/ClipboardGrab.xap"/>
    		  <param name="onError" value="onSilverlightError" />
    		  <param name="background" value="white" />
    		  <param name="minRuntimeVersion" value="5.0.61118.0" />
    		  <param name="autoUpgrade" value="true" />
    		  <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0" style="text-decoration:none">
     			  
    		  </a>
    	    </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
        </form>
    </body>
    </html>
    così hai anche tutto il meccanismo per installare SL sul browser.

    comunque se vuoi ti mando il progetto completo anche di parte lato server (con aspx), così vedi tutto il giro completo. Il problema è che non ho spazio web per farti fare il download del progetto, ma se vuoi mi mandi un indirizzo mail in MP, a patto però che poi lo metti su un server e metti il link anche qui per gli altri.

  8. #18
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Sei davvero molto gentile.
    Facciamo così: provo il codice mandato e vedo se riesco. Altrimenti accetterò il tuo consiglio, dopo aver studiato un po' Silverlight, si intende .

    Ti saluto
    Pietro

  9. #19
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Ciao Pietro,
    figurati, non è niente di che... fidati
    ovviamente se non hai mai avuto a che fare con Silverlight a primo impatto può sembrare complesso, ma se ti crei un progetto già vedi tutto più chiaro. io ti darei anche lo xap già pronto, ma poi immagino voglia modificare il tutto per adattarlo al tuo caso, sia pure solo a livello estetico. Inoltre ora l'unica cosa che fa è quella di visualizzare i dati, ma immagino li voglia trattare in qualche modo... insomma l'ideale è che veda dove poter mettere le mani almeno nelle parti basilari, poi magari le cose più complesse potrai chiedermi aiuto, all'inizio alcuni meccanismi appaiono ostici. infatti stavo per farlo con MVVM, ma poi ho pensato che andavo ad aggiungere un sacco di codice che avrebbe reso molto meno "amichevole" il tutto...

    buon fine settimana.


  10. #20
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Puoi consigliare qualche buon libro su Silverlight ? Io, a parte il nome, non ne so niente Non so neanche se ne vada la pena a studiarlo (e qui mi aspetto un altro tuo consiglio)

    ciao e buon fine settimana pure a te
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.