|
I posted this a few days ago, but it got kinda lost. I want to have the final array NOT contain the part before the equals sign (result, etc...)
Hey, I was wondering if anyone can help me with trimming a string array. I am calling an API that returns this (At bottom of post).
I am then using this to convert that into a string array
string[] apiresult = new string[25];<br />
char[] splitter = { ';' };<br />
apiresult = result.Split(splitter);
My question is, how do I trim the string array so it just contains
success<br />
1<br />
Bob<br />
etc...
instead of
result=success<br />
userid=1<br />
firstname=Bob<br />
etc...
result=success;userid=1;firstname=Bob;lastname=Smith;companyname=Smith Enterprises;email=bsmith@boostplatform.com;address1=1 Smith Drive;address2=;city=Bobtown;state=Bobstate;postcode=12345;country=US;phonenumber=419-123-4567;notes=TESTING ACCOUNT!!;password=bsmith;status=Active;credit=1010.00;taxexempt=;language=;lastlogin=No Login Logged;billingcid=0;domainemails=;generalemails=;invoiceemails=;productemails=;supportemails=;
|
|
|
|
|
This should work:
string[] finalResult = new string[apiresult.Length];
for (int i = 0; i < apiresult.Length; i++)
{
finalResult[i] = apiresult[i].Substring(apiresult[i].IndexOf('=')+1);
}
Don't be afraid of loops.
Cheers
rotter
modified on Saturday, August 16, 2008 11:41 PM
|
|
|
|
|
Hi!
Try using this
string [] tokens = myString.split (new char[] {';' , '='});
foreach (string s in tokens)
{
//do something to s;
}
DONT use a fixed array string !!!!
|
|
|
|
|
|
I have a program that opens a small input window which prompts the user to enter a name. I want to store the name entered in the input window in a string variable in the main window. How do I do that?
Jason
|
|
|
|
|
I think you have a few options. If the scenario is that the main form creates the sub form and displays it modally the easiest solution would be to just put it in a public variable, so once it closes the variable can be accessed.
If its modeless it gets a little bit more tricky. I would make a class containing the string and an object. The main form constructor would initialize the class to some good default value, then you could make the form's constructor accept this new class. When the subclass wants to change the value, use one item in the class to lock the item (for threadsafeness) and then set the string value. The main class could then lock the string, and read it.
Hope this helped,
-Kenmaz
|
|
|
|
|
A not very clean solution :
Add a member to your dialog window
public AForm : Form
{
private string _str;
public string Str
{
get { return _str;}
set { _str = value;}
}
DoSomethingToStringAndCloseWindow ()
{
_str = "Hi there";
this.Hide();
}
}
public CallingForm : Form
{
void AMethod()
{
AForm frm = new AForm ();
frm.Str = "a string";
frm.ShowDialog(this);
string newString = frm.Str;
frm.Close();
frm.Dispose();
}
}
}
A Cleaner solution is to share the same object instance between forms...
|
|
|
|
|
The easy and standard way to do this is to define a delegate so that your sub window can call a method on the main window to pass back the value
Christian Graus
No longer a Microsoft MVP, but still happy to answer your questions.
|
|
|
|
|
As CG said above use a delegate. This is an example[^] I geve somebody else a couple of weeks ago.
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Expect everything to be hard and then enjoy the things that come easy. (code-frog)
|
|
|
|
|
Dave,
I have tried the example but for some reason I get the following error:
"Error 1 'System.Windows.Window' does not contain a definition for 'SendText' and no extension method 'SendText' accepting a first argument of type 'System.Windows.Window' could be found (are you missing a using directive or an assembly reference?)
The line that I get the error on is as follows:
req.SendText = new getArtistName(changeArtistName);
I am using Windows Presentation Foundation instead of Windows Forms.
Jason
|
|
|
|
|
This works for me (WpfApplication1 : Window1 : Window2 with textBox1):
Window1.xaml.cs
using System.Windows;
namespace WpfApplication1
{
public delegate void UpdateText(string text);
public partial class Window1 : Window
{
public Window1() { InitializeComponent(); }
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Window2 window2 = new Window2();
window2.SendText = new UpdateText(Update);
window2.Show();
}
private void Update(string text)
{
this.Title = text;
}
}
}
Window2.xaml.cs
using System.Windows;
using System.Windows.Controls;
namespace WpfApplication1
{
public partial class Window2 : Window
{
public UpdateText SendText;
public Window2() { InitializeComponent(); }
private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{
SendText(textBox1.Text);
}
}
}
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Expect everything to be hard and then enjoy the things that come easy. (code-frog)
|
|
|
|
|
This worked perfectly. Thank you very much.
Jason
|
|
|
|
|
Hi,
I'm trying to serialize a simple configuration class that contains a few methods and primitive types. It also contains one very simple class:
[XmlRootAttribute(ElementName = "WildAnimal", IsNullable = false)]
class Config
{
public int a;
public int b;
public SimpleClass classinst;
public Config()
}
class SimpleClass
{
public int c;
public int d;
public SimpleClass()
}
Along with Serialize/Deseriailze functions inside the Config class:
public void SerializeObject(Object pObject)
{
try
{
FileStream fileStream = new FileStream(s_strBaseThemeDirectory +
@"\" +m_strName+".xml", FileMode.CreateNew, FileAccess.ReadWrite);
XmlSerializer xs = new XmlSerializer(typeof(Config));
XmlTextWriter xmlTextWriter = new XmlTextWriter(fileStream, Encoding.UTF8);
xs.Serialize(xmlTextWriter, pObject);
fileStream = (FileStream)xmlTextWriter.BaseStream;
fileStream.Close();
}
catch (Exception e)
{
Utilities.Trace("Error Serializing the XML: " + e.ToString());
}
}
public Configuration DeserializeObject(string strName)
{
FileStream fileStream = new FileStream("filename.xml", FileMode.Open, FileAccess.ReadWrite);
XmlSerializer xs = new XmlSerializer(typeof(Config));
XmlTextWriter xmlTextWriter = new XmlTextWriter(fileStream, Encoding.UTF8);
return (Configuration)xs.Deserialize(fileStream);
}
Everything works fine without the SimpleClass, but when that gets thrown into the mix I've been running into exceptions being thrown (the SimpleClass is actually in an Arraylist). Any idea how I should get around this issue?
Thanks!
-Ken
|
|
|
|
|
Did You added the attributes [Serializable] in classes ?
this should be fix the problem :
[Serializable]
class Config
{
public int a;
public int b;
public SimpleClass classinst;
public Config()
}
[Serializable]
class SimpleClass
{
public int c;
public int d;
public SimpleClass()
}}
}
|
|
|
|
|
Hi
i want to cast some xEventHandlers to base System.EventHandler, i write this sample class :
public class myClass
{
public event EventHandler ControlVlaueChanged;
public event DataGridViewCellEventHandler DataGridViewCellDataChanged;
public FormEx()
{
this.ControlVlaueChanged += new EventHandler(this.OnControlValueChanged);
}
private void myMethod(Control control)
{
if (control is DataGridView) (control as DataGridView).CellValueChanged += (DataGridViewCellEventHandler)this.ControlVlaueChanged;
}
protected virtual void OnControlValueChanged(object sender, EventArgs e)
{
}
}
i want when CellValueChanged was occurs, OnControlValueChanged execute automatically, for this, in myMethod method, i try to cast our EventHandler to DataGridViewCellEventHandler, but the following error message shown me :
Cannot convert type 'System.EventHandler' to 'System.Windows.Forms.DataGridViewCellEventHandler'
how to solve my problem ?
thanks
|
|
|
|
|
Hi,
What are you trying to do is not very clear
You are trying to cast delegates? In dont think that casting is possible for delegates.
You can create a delegate that handles your controls event :
public delegate void MyEventHandler (object sender, EventArgs e);
...
void AMethod (Control c)
{
c.OnSomeEvent += new MyEventHandler(SomeMethod);
}
void SomeMethod (object sender , EventArgs e)
{
...
}
|
|
|
|
|
Thanks lisan_al_ghaib
as you can see in above code, i have a general eventHandler method to handle all events that occurs:
protected virtual void OnControlValueChanged(object sender, EventArgs e)
{
}
i want when DataGridViewCellDataChanged event occured, the above event handler method handle it, but how to do ?
thanks
|
|
|
|
|
Hi !
Here is a little sample:
void AddControlToMyEventHandler (Control c)
{
if (c is DataGrid)
{
((DataGrid)c).DataGridViewCellDataChanged += new EventHandler (OnControlValueChanged);
}
if (c is TextBox)
{
((TextBox)c).TextChanged += new EventHandler (OnControlValueChanged);
}
....
}
This should work
|
|
|
|
|
Thanks lisan_al_ghaib
but i try this, before post, this code :
private void AddControlToMyEventHandler
{
if (control is DataGridView) (control as DataGridView).CellValueChanged += new EventHandler(this.OnControlValueChanged);
}
couse the following error message shown me :
Cannot implicitly convert type 'System.EventHandler' to 'System.Windows.Forms.DataGridViewCellEventHandler'
|
|
|
|
|
hdv212 wrote: Cannot implicitly convert type 'System.EventHandler' to 'System.Windows.Forms.DataGridViewCellEventHandler'
That is pretty self explanatory. Your event hooking should be
(control as DataGridView).CellValueChanged += new DataGridViewCellEventHandler(this.OnControlValueChanged);
|
|
|
|
|
Thanks N a v a n e e t h
This code work, but my problem was not solved, i need to cast my event handler to another event without create new event handler, in other word, i want cast current eventHandler (this.OnControlValueChanged) and pass it to DataGridView.CellValueChanged eventHandler.
thanks
|
|
|
|
|
Hi,
I'm a rather new C# user and I'm still figuring out the ropes of forms programming and such.
For the part of the program I'm working on, I basically want to move an image around on the screen, in a region (advanced, I know <end sarcasm="">). I achieved this just fine with mouse click and drag, but I'm unable to get any sort of keyboard input. Here's the part of the code I'm using:
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
using(Region boardRegion = new Region(new Rectangle(ClientRectangle.X, ClientRectangle.Y,
(int)(ClientRectangle.Width), (int)(ClientRectangle.Height * boardRegionSize))))
{
g.Clip = boardRegion;
using(Bitmap boardImage = new Bitmap(board.ImagePath)){
g.DrawImage(boardImage, board.X, board.Y);
}
}
base.OnPaint(e);
}
private void CMGame_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Up)
board.Y -= 30;
}
And for part of InitializeComponent(), I have
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.CMGame_KeyDown);
(automatically done by windows)
Basically, nothing happens when I press a key (the up arrow or anything else, since I've tried different keys in testing)
I read somewhere that I could try overriding WndProc, but I don't know how I would do this (even after I wrote the override method header and and found the code for KeyDown, 0x0100)
For reference, I also have a button in the form with a click event.
Help would be much appreciated.
|
|
|
|
|
You need to tell the control that's holding the image that is needs to be redrawn either by calling it's invalidated method or calling onpaint directly depending on the situation. You could hook this up to be done automatically by putting it in a locationchanged event which you can fire whenever X or Y is changed
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Expect everything to be hard and then enjoy the things that come easy. (code-frog)
|
|
|
|
|
Right, I actually had that earlier before I started messing with things. Even with this.Invalidate() after it, nothing happens. I think that the event isn't being fired at all, since, for parts of my test, I just told the keydown, keypress, and keyup to change the text of the form. Nothing happened anytime I pressed a button.
|
|
|
|
|
Ok, I found my problem. Once I removed my button, the key input worked again. Can anyone tell me what else would have worked?
modified on Sunday, August 17, 2008 7:36 PM
|
|
|
|