|
I'd work in a similar fashion; you connect to a public IP, and do your thing. The only annoying part being the firewalls and routers in between - some ports are closed by default.
|
|
|
|
|
In VB.NET I do this:
Public Property LogoutCommand As ICommand
...
LogoutCommand = New RelayCommand(AddressOf LogoutExecute, AddressOf CanLogoutExecute)
but when I try this in C#:
public ICommand LogoutCommand;
...
LogoutCommand = new RelayCommand(LogoutExecute, CanLogoutExecute);
...
private void LogoutExecute(){...}
private bool CanLogoutExecute()
{
return true;
}
...
I get an error: "the best overloaded method match for RelayCommand(System.Action<object>, System.Predicate<object>) has some invalid arguments"
Here is the RelayCommand Class:
public class RelayCommand : ICommand
{
private readonly Action<Object> _execute;
private readonly Predicate<Object> _canExecute;
public RelayCommand(Action<object> execute): this(execute, null){ }
public RelayCommand(Action<object> execute, Predicate<Object> canExecute)
{
if (execute == null)
{
throw new ArgumentException("execute");
}
_execute = execute;
_canExecute = canExecute;
}
[DebuggerStepThrough()]
public bool CanExecute(object parameter)
{
return _canExecute == null ? true : _canExecute(parameter);
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
_execute(parameter);
}
}
public class RelayCommand<T> : ICommand
{
private readonly Action<T> _execute;
private readonly Predicate<T> _canExecute;
public RelayCommand(Action<T> execute): this(execute, null){}
public RelayCommand(Action<T> execute, Predicate<T> canExecute)
{
if (execute == null)
{
throw new ArgumentException("execute");
}
}
[DebuggerStepThrough()]
public bool CanExecute(object parameter)
{
return _canExecute == null ? true : _canExecute((T)parameter);
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
_execute((T) parameter);
}
}
Any suggestions?
I don't speak Idiot - please talk slowly and clearly
"I have sexdaily. I mean dyslexia. Fcuk!"
Driven to the arms of Heineken by the wife
modified 18-Nov-12 3:54am.
|
|
|
|
|
Andy_L_J wrote: AddressOf
... in your VB declarations is one clue here along with your error message.
Your RelayCommand constructor takes two delegates. In VB.Net you use the AddressOf operator to get a delegate for a method. In C# we use a delegate directly.
Try something like this to create delegates to your methods:
LogoutCommand = new RelayCommand(new Action<object>(LogoutExecute), new Predicate<object>(CanLogoutExecute));
Edit: Your LogoutExecute and CanLogoutExecute methods should both have one parameter of type object .
modified 18-Nov-12 4:32am.
|
|
|
|
|
Cheers Dave, worked a treat.
I am self-learning C# after many years with VB.NET and some of conversions are making me crazy.
I don't speak Idiot - please talk slowly and clearly
"I have sexdaily. I mean dyslexia. Fcuk!"
Driven to the arms of Heineken by the wife
|
|
|
|
|
Keep persevering! Most things are fairly straight forward in my experience - I was once a VBer too, many years ago. Now I actually find it quite difficult to code in VB for the first 15 minutes or so, mainly cause I want to put a ; at the end of everything and wrap things in { }
|
|
|
|
|
I am enjoying the process however at the moment I get a couple hunderd moans from the compiler about missing ; and { } every time I build
I don't speak Idiot - please talk slowly and clearly
"I have sexdaily. I mean dyslexia. Fcuk!"
Driven to the arms of Heineken by the wife
|
|
|
|
|
Hi all,
I'm not sure this is the right forum,but I thought I'll give it a try,since not getting answers from DevExpress support center.
I'm using DevExpress GridView for winforms applications.
Also using VS2010 and Linq to SQL.
My grid view is binded to a LINQ table which represent a table in my database.
Let say I have a Person class with two properties - FirstName and LastName.
These two properties are persistent.
What I'm trying to do is to add a third property which will not be persistent and called FullName = LastName + FirstName.
This is working fine and the grid display the full name correctly.
My problem is when trying to filter values using the filter buttons in the column header,the dropdown list is empty...
When making FullName saved in the database - everything is OK.
Can anyone save me?
Thanks,
Eli
|
|
|
|
|
Can you override some kind of grid_OnFilter event?
There would be just added filter for both FirstName and LastName. But really whole idea for that grid is wrong. Why? What happend whe you will have 1000, 10000, or 1000000 records? Grid will fetch all of them filter, sort and then show. More records then more time this will take.
No more Mister Nice Guy... >: |
|
|
|
|
|
using (FileStream fs = File.OpenRead(path))
{
fs.BeginRead();
}
|
|
|
|
|
A few points;
- "Help" is a too generic subject; they're all looking for help
- The question is hard to find; ask a question, explain what you tried, and why it didn't work
- Reading a
Stream is often-described pattern[^]. Do you really need the async version? Wouldn't ReadToEnd[^] be a bit simpeler?
Did you write/use an async method before?
|
|
|
|
|
Sorry your question is not very clear.
BeginRead() [^] does not have any overloads that accept parameters.
|
|
|
|
|
Here is my code:
private void loadDataToolStripMenuItem_Click(object sender, EventArgs e)
{
TabPage tp = new TabPage();
tp.Text = "Data";
System.Windows.Forms.CheckedListBox AvailableDataList = new system.Windows.Forms.CheckedListBox();
AvailableDataList.Dock=DockStyle.Fill;
tp.Controls.Add(AvailableDataList);
for (bb = 0; bb < 8; bb++)
{
AvailableDataList.Items.Add("Bob");
switch(SelectName(bb))
{
case false:
AvailableDataList.SetItemChecked(bb, false);
break;
case true:
AvailableDataList.SetItemChecked(bb, true);
}
tabControl1.TabPages.Add(tp);
}
private void button4_Click(object sender, EventArgs e)
{
label1.text = AvailableDataList.Items.Count;
}
The code under the loadDataToolStripMenuItem works just fine.
I’m creating a CheckedListBox, populating it, then creating (adding) a TabPage, and placing the CheckedListBox on the new tab.
Problem is the created CheckedListBox AvailableDataList is not accessible in the button4_Click routine.
I don’t know how to make it public throughout the form.
Can someone help?
Thanks!
|
|
|
|
|
At the moment it is a method level variable, you need to make it a class level one:
System.Windows.Forms.CheckedListBox AvailableDataList;
private void loadDataToolStripMenuItem_Click(object sender, EventArgs e)
{
TabPage tp = new TabPage();
tp.Text = "Data";
AvailableDataList = new system.Windows.Forms.CheckedListBox();
AvailableDataList.Dock=DockStyle.Fill;
tp.Controls.Add(AvailableDataList);
for (bb = 0; bb < 8; bb++)
{
AvailableDataList.Items.Add("Bob");
switch(SelectName(bb))
{
case false:
AvailableDataList.SetItemChecked(bb, false);
break;
case true:
AvailableDataList.SetItemChecked(bb, true);
}
tabControl1.TabPages.Add(tp);
}
private void button4_Click(object sender, EventArgs e)
{
if(AvailableDataList != null)
label1.text = AvailableDataList.Items.Count;
}
|
|
|
|
|
How do you programatically open a file in c# to append?
I tried searching online for an example and so far I have not found anything.
There is System.IO.StreamWriter and there is System.IO.StreamReader but there is no StreamAppend. Is there some way to use StreamWriter without overwritting the content of the existing file? Is there some way to use System.IO.Stream with some sort of appending criteria?
|
|
|
|
|
You can use a FileStream with FileMode.Append
|
|
|
|
|
Xarzu wrote: How do you programatically open a file in c# to append?
As explained in the tutorials you can Google.
Xarzu wrote: I tried searching online for an example and so far I have not found anything.
"C# append text example". Nothing?
Xarzu wrote: System.IO.StreamWriter and there is System.IO.StreamReader
You don't need a stream; File.AppendAllText[^] does as requested. Usage is simple;
File.AppendAllText(@"C:\Temp\Test.txt", "Text to append");
|
|
|
|
|
Hi, New here, and would be very thankful for any help someone can give me.
The code I am working for is a population estimator. It has 3 text boxes, the first is two enter the starting population, the second is to enter the daily increase in that population in a percentage, and the third is the number of days to multiply that by.
My first issue is with the second text box. I don't know how to enter the data as a percent. As of now it is only entering as a whole number, so I when I right in text box one the number 2, in box2 the number 30, and in three the number 10, I get the 302. Not 21.209 like it should be.
Secondly, it all displays in a listbox, and its supposed to loop for every day you enter. I've got the loop to loop by days, but it just runs the same calculation, I want it make every entry build off the last.
Example:
It should say
2
2.6
3.38
4.394
5.7122
etc
I've entered in the code below.
Thanks for any help!
private void calculateButton_Click(object sender, EventArgs e)
{
int organisms;
int days;
int growth;
int population;
int count = 1;
if (int.TryParse(OrganismsTextbox.Text, out organisms))
{
if (int.TryParse(DailyTextbox.Text, out growth ))
{
if (int.TryParse(DaysTextbox.Text, out days))
do
{
population = organisms + growth * days;
resultsListbox.Items.Add("The population For day " + count + " is " + population.ToString("n1"));
count = count + 1;
}
while (count <= days);
|
|
|
|
|
You probably need to use double values rather than integers for your calculations, for greater accuracy. You also need to convert the number taken from the second textbox to a percentage; it's not 30 it is .30. You also need to change your calculation to calculate the growth in compound terms - I'm not sure of the actual formula.
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
There are a couple of simple things to do - firstly as Richard said, you need to use floating point values instead of integers:
2 + 30% is 2.6, but as an integer it is 2 again!
The second is that you are looping through the days, so you don't need to include the number of days in each calculation - just use the result from the previous day.
The third is that when you want an increased value, you can't just multiply by the percentage - 2 * 30% is 0.6, so your increase is 0.6, not your population. To increase your population, multiply but 1.0 + the percentage.
Finally, there is a better way to loop through the days: use a for loop instead of a while:
for (int day = 1; day <= days; day++)
{
... calculate here
}
So, my version would be:
resultsListbox.Items.Add(string.Format("The population for day {0} is {1}", day, organisms));
organisms *= 1.0 + percent;
with percent adjusted to 0.3 as Richard suggested.
If you get an email telling you that you can catch Swine Flu from tinned pork then just delete it. It's Spam.
|
|
|
|
|
Thanks guys! Got it to work!
|
|
|
|
|
Glad to hear it!
If you get an email telling you that you can catch Swine Flu from tinned pork then just delete it. It's Spam.
|
|
|
|
|
I'm having trouble with the interface for the Factory Design Pattern. I've looked at
http://dotnet.dzone.com/articles/design-patterns-c-factory,
which follows my design very closely since it was the first good example I found a while back.
I took a look at
http://stackoverflow.com/questions/27294/abstract-factory-design-pattern,
but my design is very different.
Right now, this is what it looks like. I have included a lot of code because I have a feeling the problem has to do with the visual studio project breakdown. It used to be more simple, with my CR5, interface, factory, CB_spec, El, etc in the same visual studio project. I had to move things around as shown per design discussions and the need for CR6, etc to be separate. Now I'm getting some compilation problems I'm not sure what to do with. See ** below for the first and worst. My question is regarding the compilation issue below.
My iCR Visual Studio project which is the interface:
public interface iCR
{
int CB_IO_Init(int slaveIndex);
int WritePortReady();
int WritePortBusy();
void initCRData(byte[] writeBuffer, byte[] statusBuffer, int SlaveIndex, USB_Comm.CB cb, int cr_Type);
int ProcessTWriting(ref Byte[] writeDat, ref Byte[] statusDat, ref Byte[] dataDumpWriteCheck);
void Failure(String message);
void Success(String message);
}
My CR_Factory Visual Studio project
namespace CR_Factory
{
public class Cr
{
}
public class CRFactory
{
public enum CRType
{
CR0,
CR1,
CR3,
CR4,
CR5,
CR6
}
public CRFactory()
{
}
public iCR GetCR(CRType type)
{
iCR cr = null;
switch (type)
{
case CRType.CR5:
cr = new CR5();
break;
case CRType.CR6:
break;
default:
throw new ArgumentException(string.Format("A CR of type {0} cannot be found", Enum.GetName(typeof(CRType), type)));
}
return cr;
}
public CRType DetermineCR_Type(int type)
{
switch (type)
{
case 0:
return CRType.CR0;
case 1:
return CRType.CR1;
case 3:
return CRType.CR3;
case 4:
return CRType.CR4;
case 5:
return CRType.CR5;
case 6:
return CRType.CR6;
default:
throw new ArgumentException(string.Format("A type of type {0} cannot be found", type));
}
}
}
}
My CR5 Visual Studio Project has a lot of classes in it, but right now I’m just showing you the part referred to in the factory. Later I’ll create a CR6 VS project, etc. As you can see, the compiler doesn't think I implemented initCRData but it's right there, and curly brackets are fine.
public class CR5 : iCR **compile error CR5_new.CR5 does not implement interface member iCR.initCRData(byte[],byte[],int,USB_Comm.CB,int)
{
CB_703 cb_specific = null;
public CR5()
{
cb_specific = new CB_703(SlaveIndex);
}
public void initCRData(byte[] writeBuffer, byte[] statusBuffer, int slaveIndex, USB_Comm.CB cb_specificInstance, int crType)
{...
}
public int CB_IO_Init(int SlaveIndex)
{
int result = -534;
result = cb_specific.IO_Init(SlaveIndex);
return result;
}
.
.
.
}
I have another Visual Studio Project (actually several) that instantiates the factory and gets the appropriate type. We’ll call it El:
namespace CrWr
{
public partial class PControl : UserControl
{
public PControl()
{
}
public Control GetPControl(USB_Comm.CB cbInstance, string dllSelected, THandlerApplication.Temp.TEMP[] temp, string dll, SC.SC.S_C c0)
{
cb = cbInstance;
createControls();
itsDll = dll;
tArr = temp;
cert = c0;
CR_Factory.CRFactory factory = new CR_Factory.CRFactory();
CRFactory.CRType type = factory.DetermineCR_Type(cr_Type);
try
{
cr = factory.GetCR(type); }
catch (Exception ex)
{
Console.WriteLine(ex.InnerException);
}
return this;
}
private void OnP()
{
int result = -536;
while (rL)
{
result = cr.CB_IO_Init(SlaveIndex);
if (result == 0)
{
…
}
}
.
.
.
}
|
|
|
|
|
Try this;
public class CR5 : iCR
{
CB_703 cb_specific = null;
public CR5()
{
cb_specific = new CB_703(SlaveIndex);
}
public void iCR.initCRData(byte[] writeBuffer, byte[] statusBuffer, int slaveIndex, USB_Comm.CB cb_specificInstance, int crType)
{...
}
public int CB_IO_Init(int SlaveIndex)
{
int result = -534;
result = cb_specific.IO_Init(SlaveIndex);
return result;
}
|
|
|
|
|
When I do that, the compilation error turns to:
The modifier 'public' is not valid for this item.
|
|
|
|
|
Makes sense. Being an interface, marking it public would be redundant. Delete the keyword.
|
|
|
|
|