示例#1
0
        private void bSave_Click(object sender, EventArgs e)
        {
            var bytes = new List <byte>();

            for (int j = 0; j < boxes.Count; j++)
            {
                var          vt       = valueTypes[j];
                string       tbText   = boxes[j].Text;
                NumberStyles numStyle = NumberStyles.Any;
                if (tbText.StartsWith("0x"))
                {
                    numStyle = NumberStyles.HexNumber;
                    tbText   = tbText.Substring(2);
                }
                if (!boxes[j].Enabled)
                {
                    continue;
                }
                switch (vt)
                {
                case ElementValueType.Byte:
                {
                    byte b;
                    if (!byte.TryParse(tbText, numStyle, null, out b))
                    {
                        MessageBox.Show("Invalid byte: " + tbText, "Error");
                        return;
                    }
                    bytes.Add(b);
                    break;
                }

                case ElementValueType.Short:
                {
                    short s;
                    if (!short.TryParse(tbText, numStyle, null, out s))
                    {
                        MessageBox.Show("Invalid short: " + tbText, "Error");
                        return;
                    }
                    byte[] conv = TypeConverter.ss2h(s);
                    bytes.Add(conv[0]);
                    bytes.Add(conv[1]);
                    break;
                }

                case ElementValueType.UShort:
                {
                    ushort s;
                    if (!ushort.TryParse(tbText, numStyle, null, out s))
                    {
                        MessageBox.Show("Invalid ushort: " + tbText, "Error");
                        return;
                    }
                    byte[] conv = TypeConverter.s2h(s);
                    bytes.Add(conv[0]);
                    bytes.Add(conv[1]);
                    break;
                }

                case ElementValueType.Int:
                {
                    int i;
                    if (!int.TryParse(tbText, numStyle, null, out i))
                    {
                        MessageBox.Show("Invalid int: " + tbText, "Error");
                        return;
                    }
                    byte[] conv = TypeConverter.si2h(i);
                    bytes.AddRange(conv);
                    break;
                }

                case ElementValueType.UInt:
                {
                    uint i;
                    if (!uint.TryParse(tbText, numStyle, null, out i))
                    {
                        MessageBox.Show("Invalid uint: " + tbText, "Error");
                        return;
                    }
                    byte[] conv = TypeConverter.i2h(i);
                    bytes.AddRange(conv);
                    break;
                }

                case ElementValueType.Float:
                {
                    float f;
                    if (!float.TryParse(tbText, numStyle, null, out f))
                    {
                        MessageBox.Show("Invalid float: " + tbText, "Error");
                        return;
                    }
                    byte[] conv = TypeConverter.f2h(f);
                    bytes.AddRange(conv);
                    break;
                }

                case ElementValueType.FormID:
                {
                    uint i;
                    if (!uint.TryParse(tbText, NumberStyles.AllowHexSpecifier, null, out i))
                    {
                        MessageBox.Show("Invalid formID: " + tbText, "Error");
                        return;
                    }
                    byte[] conv = TypeConverter.i2h(i);
                    bytes.AddRange(conv);
                    break;
                }

                case ElementValueType.String:
                {
                    byte[] conv = System.Text.Encoding.Default.GetBytes(tbText);
                    bytes.AddRange(conv);
                    bytes.Add(0);
                    break;
                }

                case ElementValueType.BString:
                {
                    bytes.AddRange(TypeConverter.s2h((ushort)tbText.Length));
                    bytes.AddRange(System.Text.Encoding.Default.GetBytes(tbText));
                    break;
                }

                case ElementValueType.IString:
                {
                    bytes.AddRange(TypeConverter.si2h(tbText.Length));
                    bytes.AddRange(System.Text.Encoding.Default.GetBytes(tbText));
                    break;
                }

                case ElementValueType.LString:
                {
                    uint i;
                    var  ltag = boxes[j].Tag as lTag;
                    if (ltag != null)
                    {
                        if (!ltag.cb.Checked)
                        {
                            if (!uint.TryParse(ltag.id.Text, NumberStyles.AllowHexSpecifier, null, out i))
                            {
                                MessageBox.Show("Invalid string id: " + ltag.id.Text, "Error");
                                return;
                            }
                            byte[] conv = TypeConverter.i2h(i);
                            bytes.AddRange(conv);
                        }
                        else
                        {
                            byte[] conv = System.Text.Encoding.Default.GetBytes(ltag.str.Text);
                            bytes.AddRange(conv);
                            bytes.Add(0);
                        }
                    }
                    break;
                }

                case ElementValueType.Str4:
                {
                    var txtbytes = new byte[] { 0x32, 0x32, 0x32, 0x32 };
                    System.Text.Encoding.Default.GetBytes(tbText, 0, Math.Min(4, tbText.Length), txtbytes, 0);
                    bytes.AddRange(txtbytes);
                }
                break;

                default:
                    throw new ApplicationException();
                }
            }
            sr.SetData(bytes.ToArray());
            Close();
        }