Autor Beitrag
Csharp-programmierer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Do 07.04.16 15:45 
Hallo ihr Experten.

Meine Idee: der Benutzer hat ein Formular mit einer ListView. In der ListView sind Daten für Title, Name usw. Per Mausklick, soll für jedes Item der ListView ein Event gefeuert werden. Bis dahin funktioniert alles. Eine Menüleiste in HTML ist ja so aufgebaut (als Tabelle) alls Zellen außer die aktuelle sind als Link definiert.

ausblenden HTML-Dokument
1:
2:
3:
4:
5:
<table>
 <td><a href="Datei 1.html">Datei 1</a></td>
 <td>Datei 2</td>
 <td><a href="Datei 3.html">Datei 3</a></td>
</table>


Das ist das Problem. Das Event akzeptiert einen Text Parameter. Aber für jedes Scintilla muss ja der einzelne Text dann anders sein. Also je nach dem, ob man in Datei 1 ist, müssen alle anderen Zellen als Link dargestellt werden.

Wie geht das?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 07.04.16 15:56 
Was hat jetzt die Listview mit der HTML-Tabelle und mit Scintilla zu tun?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Do 07.04.16 16:08 
Also in die ListView kommen alle Namen der Dateien, die das Programm erstellen soll.

Beispiel ein Projekt über Computer. Dann füge ich in die ListView ein:
-Programmierung
-Prozessor
-Grfikkarte
...

Dann soll in dem Fall 3* das Event ausgeführt werden, durch welches Scintillas erstellt werden. In diese Scintillas soll dann jeweils der HTML Code für die Menüleiste.

Also in das Scintilla1:
ausblenden HTML-Dokument
1:
2:
3:
4:
5:
<table>
<td>Programmierung</td>
<td><a href="Prozessor.html">Prozessor</a></td>
<td><a href="Grafikkarte.html">Grafikkarte</a></td>
</table>


In das Scintilla2:
ausblenden HTML-Dokument
1:
2:
3:
4:
5:
<table>
<td><a href="Programmierung.html">Programmierung</a></td>
<td>Prozessor</td>
<td><a href="Grafikkarte.html">Grafikkarte</a></td>
</table>


In das Scintilla3:
ausblenden HTML-Dokument
1:
2:
3:
4:
5:
<table>
<td><a href="Programmierung.html">Programmierung</a></td>
<td><a href="Prozessor.html">Prozessor</a></td>
<td>Grafikkarte</td>
</table>


Also das soll der PC auto. machen

Moderiert von user profile iconChristian S.: HTML-Tags hinzugefügt

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 07.04.16 16:54 
Wieso Event? :gruebel:

Also ich stelle mir das irgendwie so vor:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
    private static string BuildMenu(string activeEntry, string[] allEntries)
    {
      var sb = new StringBuilder();
      sb.AppendLine("<table><tr>");

      var noClickFormat = "<td>{0}</td>";
      var clickFormat = "<td><a href=\"{0}.html\">{0}</a></td>";

      foreach (var entry in allEntries)
      {
        sb.AppendFormat(activeEntry == entry ? noClickFormat : clickFormat, entry);
      }

      sb.AppendLine("</tr></table>");
      return sb.ToString();
    }


Das rufst Du dann für jeden Eintrag in der Listview einnmal auf, wobei allEntries alle Einträge der Listview sind und activeEntry der, für den Du das gerade aufrufst.


Generell kann ich aber nur sehr dazu raten, eine Template-Engine zu benutzen, wenn Du größere Mengen HTML-Code erzeugen möchtest.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Do 07.04.16 17:03 
Die Form1 beinhaltet eine TabControl. Über das Event werden die einzelnen Scintillas erzeugt (HTML, CSS) und gleich mit Text gefüllt. Dafür das Event, welches ich auf der Form2 über eine delegate void verknüpft habe.

Und wie ruft ich Ihre Methode auf?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 07.04.16 17:18 
Auch wenn ich etwas Context aus deinem letzten Fragen haben bei der hier kann ich nur folgendes aus deiner Beschreibung zusammenfassen:
häh?

Versuche mal deine Beschreibung auf das Wesentliche einzudampfen und zwar am besten so das am Ende eine konkrete Frage steht. Die man beantworten kann ohne jedes Detail deiner bisherigen Fragen zu kennen. Sonst hast du so gut wir gar keine Chance Hilfe zu bekommen die auch tatsächlich hilft und dich nicht einfach noch zusätzlich verwirrt.

Für diesen Beitrag haben gedankt: Christian S.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Sa 09.04.16 23:19 
Ich habe das Problem nun allein gelößt :flehan: :beer: :zustimm:
Es funktioniert jetzt genau so, wie ich es möchte :)

Hier der Code (die Testversion)
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
private void button3_Click(object sender, EventArgs e)
        {
            _x = 0;
            foreach (ListViewItem i in this.listView1.Items)
            {
                _Scintilla(GeneruereHTML());
                _x++;
            }
        }

        private void _Scintilla(string TExt)
        {
            TabPage t = new TabPage();
            ScintillaNET.Scintilla scintilla = new ScintillaNET.Scintilla();
            scintilla.Dock = DockStyle.Fill;
            scintilla.Text = TExt;
            t.Controls.Add(scintilla);
            this.tabControl1.TabPages.Add(t);
        }

        public string GeneruereHTML()
        {
            StringBuilder html = new StringBuilder();
            html.AppendLine("<!DOCTYPE html>");
            html.AppendLine(" " + "<head>");

            html.AppendLine("\t <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />");
                html.AppendLine("\t a { text-decoration:underline; }");
                html.AppendLine("\t a { text-decoration:none; }");

            html.AppendLine(" " + "<body>\r");
            html.AppendLine("\t<table>");
                foreach (ListViewItem item in this.listView1.Items)
                {
                    if (item.Index == _x)
                        html.AppendLine("\t\t<td bgcolor=\"Gray\">" + item.SubItems[1].Text + "</td>");
                    else
                        html.AppendLine("\t\t<td bgcolor=\"Gray\"><a href=\"" + item.Text + "\"</a></td>");
                }

                html.AppendLine("\t</table>");

            html.AppendLine(" " + "</body>");
            html.AppendLine("</html>");

            return html.ToString();
        }


Was haltet ihr vin dem Lösungsansatz? Kann ich daran was besser machen?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 10.04.16 00:24 
user profile iconCsharp-programmierer hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe das Problem nun allein gelößt :flehan: :beer: :zustimm:
Naja, es ist irgendwie genau das Vorgehen, was ich beschrieben hatte :nixweiss:

Zuerst einmal zum Stil:
In C# werden generell keine Unterstriche in Namen von Bezeichnern verwendet. Tippfehler ("TExt", "GeneruereHTML") darf man auch im Quelltext beheben. ;-)

_x scheint ein Feld der Klasse zu sein. Das halte ich für unsauber, weil es somit auch von anderer Methoden zugreifbar ist. Es reicht, wenn Du GeneriereHTML einen entsprechenden Parameter gibst, dann brauchst Du das Feld nicht. Ich würde außerdem empfehlen, einen sprechenderen Namen (z.B. "currentItem") zu benutzen.

Noch ein Wort zu Deinem HTML-Quelltext:
Der "head"-Tag wird nie geschlossen. Der CSS-Teil ist nicht mit entsprechenden Tags umschlossen. Du erzeugst in der Tabelle keine Zeilen ("tr").

Generell nochmal der Rat: Schau Dich mal nach einer Template-Engine um, damit Du den HTML-Quelltext nicht im C#-Quelltext stehen hast, sondern Design und Logik trennen kannst. Meist kann man ein Template dann auch viel besser bearbeiten, weil es eine HTML-Datei ist, mit der man in einem entsprechenden Editor bequem arbeiten kann.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".