Avatar billede daywalker123 Nybegynder
28. juni 2008 - 14:56 Der er 10 kommentarer og
1 løsning

Consol program i form program

Hej

Jeg har lavet denne consol app i C#:

using System;
using System.IO;
using System.Xml;

public class Sample
{

    public static void Main()
    {

        XmlDocument xmlDocument = new XmlDocument();
        xmlDocument.Load( @"C:\S2.xml" );
        foreach( XmlElement LogEvent in xmlDocument.SelectNodes( @"Events/LogEvent" ) )
        {
            string actionString = LogEvent.GetAttribute("Value");

            int actionInt = Convert.ToInt16(actionString);

            char c = (char)actionInt;
            Console.WriteLine("----------------------------------------------------------");
            Console.WriteLine("The ASCII value: " + actionInt + " " + "Converted to text: " + c);

            Console.WriteLine("Action taken: {0} At this time: {1}.", LogEvent.GetAttribute("Action"), LogEvent.GetAttribute("Time"));
            Console.WriteLine("----------------------------------------------------------");
        }   
    }

}


Som tager nogen data fra en xml fil og printer nogle forskellige attributter ud.


Men jeg vil gerne have det ind i mit Form program (også C#) - hvor jeg vil have den metode jeg har lavet til at køre når jeg trykker på en button og så skal den skrive det ud i et tekstfelt istedet for i en consol?

Hvordan gør jeg dette?


- sidespørgsmål:
Jeg har en xml fil der ser således ud:

<?xml version="1.0" encoding="utf-8"?>
<Logfile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="Translog">
  <VersionString>3.2.5.0</VersionString>
  <Subject />
  <startTime>2008-03-11T09:13:01.644</startTime>
  <endTime>2008-03-11T09:16:37.773</endTime>
  <Project>
    <FileName>C:\Program Files\Translog 2006\Projects\FKK Text B.project</FileName>
    <Description />
    <sourceText>
      <Text>{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Tahoma;}}
\viewkind4\uc1\pard\lang2057\f0\fs41 On a more positive note, what the report also makes clear is that speedy and concerted international action can still avoid some of the most catastrophic projections. What is needed is a political response to what the scientists are telling us is necessary. Politically, the lights are on green for a breakthrough in the form of a roadmap for a new international agreement on enhanced global action to fight climate change in the period after 2012, the year the first commitment period of the Kyoto Protocol expires. The Bali conference will not deliver a fully negotiated and agreed climate deal, but is definitely aimed at setting the necessary wheels in motion.\lang1033\fs17\par
}
</Text>
      <UnitMarkers />
      <Dictionary />
    </sourceText>
    <versionString />
    <targetFont>Tahoma</targetFont>
    <lineHeightSource>1</lineHeightSource>
    <lineHeightTarget>1.5</lineHeightTarget>
    <backgroundColorSource />
    <backgroundColorTarget />
    <textColorTarget />
    <textAlignmentTarget>Left</textAlignmentTarget>
    <targetFontSize>20</targetFontSize>
    <useSourceText>true</useSourceText>
    <viewNextUnitKey>0</viewNextUnitKey>
    <promptSubjectName>false</promptSubjectName>
    <syncEnabled>false</syncEnabled>
    <broadcastEnabled>true</broadcastEnabled>
    <udpIP />
    <udpPort>18193</udpPort>
    <signalInterval>10</signalInterval>
    <audioEnabled>false</audioEnabled>
    <eyeTrackerEnabled>true</eyeTrackerEnabled>
    <useDictionaryPrompts>false</useDictionaryPrompts>
    <useExtendedTranslations>false</useExtendedTranslations>
  </Project>
  <Events>
    <LogEvent Action="5" Value="1" Cursor="0" Block="0" Time="00:00:00:000" />
    <LogEvent Action="7" Value="1" Cursor="141" Block="12" Time="00:00:01:342" />
    <LogEvent Action="7" Value="1" Cursor="154" Block="11" Time="00:00:01:836" />
    <LogEvent Action="7" Value="1" Cursor="118" Block="5" Time="00:00:02:625" />
    <LogEvent Action="7" Value="1" Cursor="124" Block="4" Time="00:00:03:604" />

og så fortsætter eventsne:

Mit consol program virker kun hvis jeg fjerner alt andet i xml filen end de <events> som den skal læse ud fra - skal jeg definere hvor i xml-filen min xmlreader skal starte eller hvordan klarer jeg dette problem?
Avatar billede arne_v Ekspert
28. juni 2008 - 15:23 #1
Erstat Console.WriteLine med en StringBuilder og Append, assign resultatet til
Text property på feltet. Og kør koden i en click event.
Avatar billede arne_v Ekspert
28. juni 2008 - 15:34 #2
Det andet problem tror jeg skyldes brug af name space. Jge prøver lige om jeg kan få det til at virke.
Avatar billede arne_v Ekspert
28. juni 2008 - 15:36 #3
XmlDocument xmlDocument = new XmlDocument();
        xmlDocument.Load( @"C:\S2.xml" );
        XmlNamespaceManager xnm = new XmlNamespaceManager(xmlDocument.NameTable);
        xnm.AddNamespace("x", "Translog");

        foreach( XmlElement LogEvent in xmlDocument.SelectNodes( "//x:Logfile/x:Events/x:LogEvent", xnm ) )
        {

synes at virke
Avatar billede daywalker123 Nybegynder
28. juni 2008 - 18:19 #4
Ja det virker - kanon, tak !..

Må lige prøve at se om jeg kan lave det andet.

Du skal også have nogle point på et tidspunkt for al din gode hjælp!
Avatar billede daywalker123 Nybegynder
28. juni 2008 - 18:35 #5
private void button4_Click(object sender, EventArgs e)
        {
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.Load(@"C:\S2.xml");
            XmlNamespaceManager xnm = new XmlNamespaceManager(xmlDocument.NameTable);
            xnm.AddNamespace("x", "Translog");
            foreach (XmlElement LogEvent in xmlDocument.SelectNodes("//x:Logfile/x:Events/x:LogEvent", xnm))
            {
                string actionString = LogEvent.GetAttribute("Value");
                int actionInt = Convert.ToInt16(actionString);
                char c = (char)actionInt;
               
                StringBuilder sbtext = new StringBuilder();
                sbtext.Append("The ASCII value: " + actionInt + " " + "Converted to text: " + c);
                sbtext.Append("Action taken: " + LogEvent.GetAttribute("Action") + " At this time: " + LogEvent.GetAttribute("Time"));

                textBox1.Text = sbtext.ToString();
            }   

Men den tager kun den første event?

Er der en hurtig og smart løsning til at den bare læser S2.xml at man så åbner en openFileDialog til at vælge hvilke xml fil man vil udlæse?
Avatar billede daywalker123 Nybegynder
28. juni 2008 - 18:53 #6
Har fået den til at læse alle events - nu mangler jeg bare det sidste så brugeren kan vælge hvilken xml fil der skal læses fra
Avatar billede arne_v Ekspert
28. juni 2008 - 20:18 #7
18:35:22 løses ved at flytte textBox1.Text = sbtext.ToString(); udenfor for løkken.
Avatar billede arne_v Ekspert
28. juni 2008 - 20:19 #8
18:53:05 må løses ved:

xmlDocument.Load(etellerandet.Text);

hvor etellerandet er en TextBox/ListBox/whatever.
Avatar billede arne_v Ekspert
28. juni 2008 - 20:19 #9
og et svar
Avatar billede daywalker123 Nybegynder
29. juni 2008 - 11:36 #10
Jeg kan ikke helt gennemskue hvordan jeg bruger openFileDialog til at vælge filen og putte filen ind i xmlDocument.Load(etellerandet.Text); ?
Avatar billede daywalker123 Nybegynder
29. juni 2008 - 11:43 #11
Nevermind :).. nu spiller det...

1000 gange tak for hjælpen arne_v..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester