-6
public void Save(string path , string fileName , PictureBox pb)                
{
    int framesNumberX = 0;
    int framesNumberY = 0;
    string fn;
    string t = Path.GetFileNameWithoutExtension(this.name);
    if (File.Exists(path + "\\" + "DATABASE" + "\\" + fileName + "\\" + t + ".txt"))
    {
        try
        {
            string f = Path.Combine(path + "\\" + "DATABASE" + "\\" + t + "\\" + fileName);
            File.Delete(f);
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: Could not delete file from disk. Original error: " + ex.Message);
        } 
        fn = path + "\\" + "DATABASE" + "\\" + t + "\\" + fileName;
    }
    else
    {
        fn = path + "\\" + "DATABASE" + "\\" + fileName + "\\" + this.name + ".txt";
    }
    OptionsFile setting_file = new OptionsFile(fn);
    setting_file.SetKey("File Name", fn);
    setting_file.SetKey("Object Name", fileName);
    setting_file.SetKey("Animation Name", this.name);
    setting_file.SetKey("picturebox.Width", pb.Width.ToString());
    setting_file.SetKey("picturebox.Height", pb.Height.ToString());
    string[] xFrames = new string[wocl.Count];
    string[] yFrames = new string[wocl.Count];
    string X="";
    string Y="";
    for (int i = 0; i < wocl.Count; i++)
    {
        X  = string.Format("Frame_X_{0} ", i + 1);
        Y  = string.Format("Frame_Y_{0} ", i + 1);
        int c = Convert.ToInt32(X);
        int d = Convert.ToInt32(Y);
        framesNumberX += c;
        framesNumberY += d;
        for (int j = 0; j < wocl[i].Point_X.Count; j++)
        {
            xFrames[i] += string.Format("{0},", wocl[i].Point_X[j]);
            yFrames[i] += string.Format("{0},", wocl[i].Point_Y[j]);   
        }    
        string tt = xFrames[i].Trim(",".ToCharArray());
        string yy =  yFrames[i].Trim(",".ToCharArray());
        setting_file.SetKey(X, tt);
        setting_file.SetKey(Y, yy);
    }    
    setting_file.SetKey("Number Of Frames X", framesNumberX.ToString());                
}

たとえば、ループで実行している場合:FrameNumber + =; たとえば6のフレーム数をカウントします。しかし、Xのフレームが表示された回数とYのフレームの数をカウントしたいと思います。

私はこのようにそれを試しました:

X  = string.Format("Frame_X_{0} ", i + 1);
Y  = string.Format("Frame_Y_{0} ", i + 1);
int c = Convert.ToInt32(X);
int d = Convert.ToInt32(Y);
framesNumberX += c;
framesNumberY += d;

しかし、それは良い方法ではありません。

たぶん私は変数ttとyyの後に最後にXとYを数える必要がありますか?ループが変数ttを実行した回数と、変数yyを実行した回数をカウントしたいと思います。int変数とmake++を入力するだけで、フレーム全体がXとYに分離する必要があります。たとえば、6つのフレームがある場合、Xは3になり、Yは3になります。

4

2 に答える 2

1

Convert.Int32()Val()メソッドではありません。言い換えると、文字列から数字だけを取得するわけではありません。を使用する場合Convert.Int32()、文字列全体を数値にする必要があります。次に例を示します。

// doesn't work
string x = "My string 123";
int y = Convert.Int32(x);

// does work
string x = "123";
int y = Convert.Int32(x);

私が正しく理解していれば、あなたは何かをintに変換し、同時にカウントしようとしています(ここ)。

X  = string.Format("Frame_X_{0} ", i + 1); 
Y  = string.Format("Frame_Y_{0} ", i + 1); 
// blows up with an exception
int c = Convert.ToInt32(X); 
int d = Convert.ToInt32(Y); 
framesNumberX += c; 
framesNumberY += d; 

上記は次のように書く方がよいでしょう。

X  = string.Format("Frame_X_{0} ", i + 1); 
Y  = string.Format("Frame_Y_{0} ", i + 1); 

framesNumberX++; 
framesNumberY++;

// or (depending on what you need)
framesNumberX = i + 1;
framesNumberY = i + 1;

または-これはさらに明確になります。最初に数学演算を実行してから、その結果をstring.Format()呼び出しに使用します。

framesNumberX = i + 1;
framesNumberY = i + 1;

X  = string.Format("Frame_X_{0} ", framesNumberX); 
Y  = string.Format("Frame_Y_{0} ", framesNumberY); 

ただし、framesNumberXとframesNumberYは、互いに等しく、イテレータと等しくなりますi + 1。これは私が変数の目的を失い始めているところです。何を達成しようとしているのかを擬似コードで明確にできると助かります。

public void MyMethod()
{
   ... code here

   // trying to `your explanation`
   ... code here


    // and here, I'm trying to `your explanation`
    ... code here

}
于 2012-07-18T12:42:13.020 に答える
0

編集

このコードが機能するために

  X  = string.Format("Frame_X_{0} ", i + 1);
  Y  = string.Format("Frame_Y_{0} ", i + 1);
  int c = Convert.ToInt32(ExtractNumbers(X));//modfied code line
  int d = Convert.ToInt32(ExtractNumbers(Y));//modfied code line
  framesNumberX += c;  framesNumberY += d;

このような番号を抽出する必要があります

static string ExtractNumbers( string expr )
{
 return string.Join( null,System.Text.RegularExpressions.Regex.Split( expr, "[^\\d]" ) );
}

前の回答

良い方法は

static void Main()
    {
    // Convert string to number.
    string text = "123";
    int num = -1;
      if( int.TryParse (text,out num))
    Console.WriteLine(num);
    }

文字列が変換可能かどうかを確認してください

于 2012-07-18T12:19:08.100 に答える