Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
04.11.10, 18:30
|
#1
|
Registriert seit: Dec 2009
Beiträge: 792
Bedankt: 49
|
VB.NET - Funktion richtig erstellen
Hallo, ich habe da ein Problem bei einer Funktion und hoffe mir kann da jemand helfen. Mein Code:
Code:
Dim variable As String
Dim index As Integer
WithEvents tmrWrite As New Timer With {.Interval = 40}
Private Function Write(ByVal text1 As String, ByVal text2 As String)
Label1.Text = Nothing
variable = text1 & vbNewLine & text2
index = 0
AddHandler tmrWrite.Tick, AddressOf tmrWrite_Tick
tmrWriteLevel_Tick()
End Function
Sub tmrWrite_Tick()
If tmrWrite.Interval = 40 Then
If Not Label1.Text = variable.Split(vbnewline)(0) Then
Label1.Text &= variable.Split(vbNewLine)(0)(index)
index += 1
Else
tmrWrite.Interval = 1000
index = 0
End If
ElseIf tmrWrite.Interval = 1000 Then
tmrWrite.Interval = 41
ElseIf tmrWrite.Interval = 41 Then
Label1.Text &= variable.Split(vbNewLine)(1)(index)
End If
End Sub
So, nun rufe ich meine Funktion auf, z.B. durch einen Buttonklick:
Code:
'Button_Click
Write("MeinText1", "MeinText2")
Damit will ich es hinbekommen, dass der Text wie eine Art Schreibmaschine geschrieben wird, also jeder Buchstabe einzeln. Erstmal wird der erste Abschnitt mit dem Intervall = 40 geschrieben (also bis vbNewLine), dann wartet er 1sec und schreibt dann mit einem Interval von 41 den 2. Abschnitt, jedoch wird nur der 1. Buchstabe geschrieben und danach nichts mehr..Allerdings klappt es wenn ich normal einen Timer nehme und den Code einfüge, aber ich würde gerne eine Funktion erstellen, damit ich nicht jedes mal so einen langen Code eingeben muss..
__________________
To succeed you have to stop being ordinary and be legen - wait for it - dary.
|
|
|
04.11.10, 19:01
|
#2
|
Mitglied
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
|
boah, wie ich die syntax von VB hasse 
wenn du c# lesen kannst, dann erstelle ich dir ein beispiel in c#.net
__________________
entropie erfordert keine wartung
|
|
|
04.11.10, 19:10
|
#3
|
Registriert seit: Dec 2009
Beiträge: 792
Bedankt: 49
|
xD Geschmackssache^^
Ja das wäre sehr nett, C# kann ich eigentlich auch und falls ich doch etwas nicht verstehe, gibts ja immer noch die Converter.
__________________
To succeed you have to stop being ordinary and be legen - wait for it - dary.
|
|
|
04.11.10, 20:41
|
#4
|
Mitglied
Registriert seit: Sep 2009
Beiträge: 426
Bedankt: 328
|
hmmm warum deklarierst Du es als Private Function? Deine Funktion gibt keinen Wert zurück! Du müsstest eigentlich eine Warnung bekommen. In deinem Fall so wie es jetzt ist reicht es als Private Sub!
Hier mal ein Bsp. zur Funktion
Deklaration:
Private Function Rechnen(ByVal x as Integer, ByVal y as Integer) as Integer
Return x + y
End Function
Aufruf:
Ergebnis = Rechnen(2, 9)
In der Variablen Ergebnis steht der Rückgabewert der Funktion Rechnen also 2 + 9 = 11
Also Funtionen werden nur verwendet wenn man Werte der Funktion übergibt und einen Wert mit Return zurückgibt.
Braucht man eine Sub der man nur Werte übergibt oder die nur etwas ausführt aber nichts zurück gibt dann verwendet man Private Sub, Public Sub oder nur Sub
Sub Label_löschen()
label1.text = ""
End Sub
Sub Label_Füllen(ByVal ÜbergebenerText as String)
label1.Text = ÜbergebenerText
End Sub
Falsch:
Private Function Label_Füllen(ByVal ÜbergebenerText as String)
label1.Text = ÜbergebenerText
End Sub
Richtig:
Private Function Label_Füllen(ByVal ÜbergebenerText as String) as String
Return ÜbergebenerText
End Sub
Das mal so als Info. Bei deinem Problem kann ich dir leider nicht helfen aber schaue doch mal hier [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] ist echt super Forum für so sachen.
__________________
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Gedöns. (John Osborne, engl. Dramatiker, *1921)
|
|
|
04.11.10, 20:44
|
#5
|
Banned
Registriert seit: Jun 2010
Beiträge: 226
Bedankt: 264
|
bei mir kommt auch nur ein M immer...
|
|
|
05.11.10, 18:25
|
#6
|
Mitglied
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
|
das form hat 3 elemente: textBox1, label1, timer1.
gesteuert werden die zeiten über
tickerCharMS: ms für die einzelnden buchstaben
tickerNewLineMS: ms die für eine newline gewartet werden.
tickerCharMS soll sich ja pro zeile um 1 erhöhen.
um einen effekt zu bemerken habe ich den um jeweils 50 erhöht.
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace laufschrift {
public partial class Form1 : Form {
public Form1 () {
InitializeComponent ();
this.timer1.Enabled = false;
}
private String[] tickerText;
private int tickerTextIndex;
private int tickerCharIndex;
private int tickerCharMS;
private int tickerNewLineMS;
private void initTimer () {
this.tickerText = this.textBox1.Text.Trim ().Split (new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
this.tickerTextIndex = 0;
this.tickerCharIndex = 0;
this.label1.Text = "";
this.tickerCharMS = 41;
this.tickerNewLineMS = 1000;
this.timer1.Interval = this.tickerCharMS;
this.timer1.Enabled = true;
}
private void button1_Click (object sender, EventArgs e) {
this.label1.Text = "";
if (this.textBox1.Text.Trim ().Length > 0) {
this.initTimer ();
this.button1.Enabled = false;
}
}
private bool wasNewLine = false;
private void timer1_Tick (object sender, EventArgs e) {
if (this.wasNewLine) {
this.timer1.Interval = this.tickerCharMS + this.tickerTextIndex*50;
this.wasNewLine = false;
}
string s = this.tickerText[this.tickerTextIndex];
char c = s.ElementAt (this.tickerCharIndex);
this.label1.Text += c;
if (this.tickerCharIndex + 1 < s.Length) {
this.tickerCharIndex++;
}
else {
this.tickerCharIndex = 0;
if (this.tickerTextIndex + 1 < this.tickerText.Length) {
this.label1.Text += "\r\n";
this.tickerTextIndex++;
this.timer1.Interval = this.tickerNewLineMS;
this.wasNewLine = true;
}
else {
this.timer1.Enabled = false;
this.button1.Enabled = true;
}
}
}
}
}
__________________
entropie erfordert keine wartung
|
|
|
06.11.10, 18:58
|
#7
|
Mitglied
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
|
sinnvoll wäre allerdings eine eigene Tickerklasse.
Code:
public class Ticker extends Label {
public Ticker (String[] messages, int chardelay, int linedelay) {
}
}
__________________
entropie erfordert keine wartung
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:05 Uhr.
().
|