myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

VB.NET - Funktion richtig erstellen

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 04.11.10, 18:30   #1
.ShoXx!
 
Benutzerbild von .ShoXx!
 
Registriert seit: Dec 2009
Beiträge: 793
Bedankt: 49
.ShoXx! ist noch neu hier! | 8 Respekt Punkte
Standard 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.
.ShoXx! ist offline   Mit Zitat antworten
Ungelesen 04.11.10, 19:01   #2
urga
Mitglied
 
Benutzerbild von urga
 
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 454
Bedankt: 137
urga ist noch neu hier! | 0 Respekt Punkte
Standard

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
urga ist offline   Mit Zitat antworten
Ungelesen 04.11.10, 19:10   #3
.ShoXx!
 
Benutzerbild von .ShoXx!
 
Registriert seit: Dec 2009
Beiträge: 793
Bedankt: 49
.ShoXx! ist noch neu hier! | 8 Respekt Punkte
Standard

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.
.ShoXx! ist offline   Mit Zitat antworten
Ungelesen 04.11.10, 20:41   #4
Hariboo83
Mitglied
 
Benutzerbild von Hariboo83
 
Registriert seit: Sep 2009
Beiträge: 426
Bedankt: 328
Hariboo83 ist noch neu hier! | 0 Respekt Punkte
Standard

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)
Hariboo83 ist offline   Mit Zitat antworten
Ungelesen 04.11.10, 20:44   #5
KeinGeld
Banned
 
Registriert seit: Jun 2010
Beiträge: 228
Bedankt: 264
KeinGeld ist noch neu hier! | 0 Respekt Punkte
Standard

bei mir kommt auch nur ein M immer...
KeinGeld ist offline   Mit Zitat antworten
Ungelesen 05.11.10, 18:25   #6
urga
Mitglied
 
Benutzerbild von urga
 
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 454
Bedankt: 137
urga ist noch neu hier! | 0 Respekt Punkte
Standard

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
urga ist offline   Mit Zitat antworten
Ungelesen 06.11.10, 18:58   #7
urga
Mitglied
 
Benutzerbild von urga
 
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 454
Bedankt: 137
urga ist noch neu hier! | 0 Respekt Punkte
Standard

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
urga ist offline   Mit Zitat antworten
Antwort


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

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:49 Uhr.


Sitemap

().