Hej! Du kan skicka med parametrar till ditt program genom att modifiera main(): Tack så mycket! cmdArgs måste vara deklarerat utanför main() typ direkt efter: Hej igen! Den här varianten borde fungera...Argument till Windows application
Jag har ett litet program som ska visa en textfil i en textbox. I stället för att använda någon öppna dialog eller nått annat sätt att välja fil så vill jag kunna skicka med sökvägen+filnamnet som ett argument (eller vad det kallas för) till mitt program.
typ Mittprogram.exe C:\Magnus\filen.txt
Hur fixar jag detta?
Så här ser koden ut nu.
private void ReadText()
}
string TextFile;
try
{
StreamReader sr = new StreamReader("C:\\Magnus\\filen.txt);
TextFile = sr.ReadToEnd;
{
textbox1.Text = TextFile;
}
sr.Close();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
Dessutom så får jag inte med svenska tecken in i mitt program, men dessa finns i textfilen. Nån som har några tips.
Mvh Magnus
Sv: Argument till Windows application
<code>
static void Main(string[] args)
{
cmdArgs=args;
Application.Run(new Form1());
}
</code>
Detta kräver som du ser att cmdArgs redan är deklarerat:
<code>
static string[] cmdArgs;
</code>
Därefter kan du använda startparametrarna vart som helst i din kod typ:
<code>
private void ReadText(string fileName)
{
System.IO.StreamReader sr = new System.IO.StreamReader(cmdArgs[0],System.Text.Encoding.GetEncoding("ISO-8859-1"));
this.textBox1.Text=sr.ReadToEnd();
}
</code>
Värt att notera i koden ovan är deklarationen av StreamReadern:
cmdArgs[0] som innebär att filen som skall öppnas hämtas från kommandoraden
System.Text.Encoding.GetEncoding("ISO-8859-1") gör att du får med dina svenska tecken på ett korrekt sätt.
Naturligtvis bör man inte använda cmdArgs[0] utan att först kontrollera att den finns:
<code>
private void Form1_Load(object sender, System.EventArgs e)
{
if(cmdArgs.Length>0)
{
ReadText(cmdArgs[0]);
}
else
{
this.label1.Text="";
}
}
</code>Sv:Argument till Windows application
Dock så får jag inte genom kompileringen pga "The name 'cmdArgs' does not exist in the current context." Alltså cmdArgs som finns med i
<code>
private void ReadText(string fileName)
{
System.IO.StreamReader sr = new System.IO.StreamReader(cmdArgs[0],System.Text.Encoding.GetEncoding("ISO-8859-1"));
this.textBox1.Text=sr.ReadToEnd();
}
</code>
Det har nog med deklarationen av att göra. Men vart lägger jag den? Den måste väl ligga i Main()
<code>
static string[] cmdArgs;
</code>
Mvh MagnusSv: Argument till Windows application
<code>
public class Form1 : System.Windows.Forms.Form
{
</code>Sv:Argument till Windows application
Jag får inte till det. Kanske måste tillägga att jag kör Visual C# 2005 och är nybörjare på detta.
Så här ser det ut nu i Program.cs:
<code>
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
namespace AlarmHelpText
{
public class Program
{
static string[] cmdArgs;
[STAThread]
static void Main(string[] args)
{
cmdArgs = args;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
</code>
I min Form1.cs ser det ut så här:
<code>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace AlarmHelpText
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void ReadText(string fileName)
{
string TextFile;
try
{
StreamReader sr = new StreamReader(cmdArgs[0], System.Text.Encoding.GetEncoding("ISO-8859-1"));
this.textBox1.Text = sr.ReadToEnd();
sr.Close();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
ActiveForm.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
// Här ska if-satsen in sen.
}
}
}
</code>
Alltså när jag deklarerar cmdArgs i Program.cs så hittar Form1.cs inte den. Vad är fel?
Mvh Magnus (börjar se suddigt nu ;)Sv: Argument till Windows application
Program.cs:
<code>
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
namespace AlarmHelpText
{
public class Program
{
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1(args));
}
}
}
</code>
I min Form1.cs ser det ut så här:
<code>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace AlarmHelpText
{
public partial class Form1 : Form
{
static string[] cmdArgs;
public Form1(string[] args)
{
cmdArgs=args;
InitializeComponent();
}
private void ReadText(string fileName)
{
string TextFile;
try
{
StreamReader sr = new StreamReader(cmdArgs[0], System.Text.Encoding.GetEncoding("ISO-8859-1"));
this.textBox1.Text = sr.ReadToEnd();
sr.Close();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
ActiveForm.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
if(cmdArgs.Length>0){ this.ReadText(cmdArgs[0]); }
}
}
}
</code>