c#要做到这样的功能要怎么做?进来看看

qq_21238201 2018-01-15 11:54:26


这个用什么控件?然后这些数据放在ini或者txt都可以。这个表单就是可以显示ini或者txt里面对应的数据。然后点击这个字可以改变方式 比如现在是销毁点击下变不销毁再点击下变销毁这样的功能。然后要对应的ini或者txt对应修改。比如点击下销毁变成不销毁,那也要修改下文件里的对应的数据。谁能帮我写个例子吗?
...全文
488 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_21238201 2018-02-01
  • 打赏
  • 举报
回复
引用 5 楼 nihai2017 的回复:
下面用LISTVIEW的方式了实现你要的效果,文件存在INI文件中,双击更改 代码:

        #region 调用windowsAPI
        //用来读取INI 文件的内容  
        [DllImport("Kernel32.dll")]
        private static extern int GetPrivateProfileString(string strAppName, string strKeyName, string strDefault, StringBuilder sbReturnString, int nSize, string strFileName);

        //获取ini文件所有的section  
        [DllImport("Kernel32.dll")]
        private extern static int GetPrivateProfileSectionNamesA(byte[] buffer, int iLen, string fileName);

        //根据传入参数的不同进行写入或修改或删除操作(返回值 Long,非零表示成功,零表示失败)  
        [DllImport("Kernel32.dll")]
        public static extern long WritePrivateProfileString(string strAppName, string strKeyName, string strKeyValue, string strFileName);

        /// <summary>  
        /// 返回该配置文件中所有Section名称的集合  
        /// </summary>  
        /// <returns></returns>  
        public List<string> ReadSections(string file)
        {
            byte[] buffer = new byte[65535];
            int rel = GetPrivateProfileSectionNamesA(buffer, buffer.GetUpperBound(0), file);
            int iCnt, iPos;
            List<string> arrayList = new List<string>();
            string tmp;
            if (rel > 0)
            {
                iCnt = 0; iPos = 0;
                for (iCnt = 0; iCnt < rel; iCnt++)
                {
                    if (buffer[iCnt] == 0x00)
                    {
                        tmp = System.Text.ASCIIEncoding.Default.GetString(buffer, iPos, iCnt - iPos).Trim();
                        iPos = iCnt + 1;
                        if (tmp != "")
                            arrayList.Add(tmp);
                    }
                }
            }
            return arrayList;
        }



        /// <summary>  
        /// 读取指定节点下的指定key的value返回string  
        /// </summary>  
        /// <param name="section"></param>  
        /// <param name="key"></param>  
        /// <returns></returns>  
        public string ReadIniKey(string section, string key, string file)
        {
            if (section.Trim().Length <= 0 || key.Trim().Length <= 0) return string.Empty;
            StringBuilder strTemp = new StringBuilder(256);
            GetPrivateProfileString(section, key, string.Empty, strTemp, 256, file);
            return strTemp.ToString().Trim();
        }
        /// <summary>  
        /// 往指定section的key中写入value  
        /// </summary>  
        /// <param name="section"></param>  
        /// <param name="key"></param>  
        /// <param name="value"></param>  
        /// <returns></returns>  
        public bool WriteIniKey(string section, string key, string value, string file)
        {
            bool flag;
            try
            {
                if (section.Trim().Length <= 0 || key.Trim().Length <= 0 || value.Trim().Length <= 0)
                {
                    flag = false;
                }
                else
                {

                    if (WritePrivateProfileString(section, key, value, file) == 0)
                    {
                        flag = false;
                    }
                    else
                    {
                        flag = true;
                    }
                }
            }
            catch
            {
                flag = false;
            }
            return flag;
        }

        public string iniFile = @"D:\Studio\Visual Studio 2010\Projects\Test\WinFormTest\bin\Debug\test.ini";

        #endregion

        private void Form1_Load(object sender, EventArgs e)
        {
            LoadINI();
        }
        private void LoadINI()
        {
            List<string> iniList = ReadSections(iniFile);
            listView1.Items.Clear();
            ListViewItem lvItem;
            foreach (string item in iniList)
            {
                string wpmc = ReadIniKey(item, "WPMC", iniFile);
                string clfs = ReadIniKey(item, "CLFS", iniFile);
                lvItem = new ListViewItem(wpmc);
                lvItem.SubItems.Add(clfs);
                lvItem.Tag = item + "," + clfs; 
                listView1.Items.Add(lvItem);

            }

        }

        private void listView1_DoubleClick(object sender, EventArgs e)
        {
            string item = listView1.SelectedItems[0].Tag.ToString().Split(',')[0];
            string clfs = listView1.SelectedItems[0].Tag.ToString().Split(',')[1];
            WriteIniKey(item, "CLFS", clfs == "销毁" ? "不销毁" : "销毁", iniFile);
            LoadINI();
        }
INI文件:
可是这个 其他的 不是销毁和不销毁了 是卖掉和不卖掉
nihai2017 2018-01-17
  • 打赏
  • 举报
回复
下面用LISTVIEW的方式了实现你要的效果,文件存在INI文件中,双击更改
代码:

#region 调用windowsAPI
//用来读取INI 文件的内容
[DllImport("Kernel32.dll")]
private static extern int GetPrivateProfileString(string strAppName, string strKeyName, string strDefault, StringBuilder sbReturnString, int nSize, string strFileName);

//获取ini文件所有的section
[DllImport("Kernel32.dll")]
private extern static int GetPrivateProfileSectionNamesA(byte[] buffer, int iLen, string fileName);

//根据传入参数的不同进行写入或修改或删除操作(返回值 Long,非零表示成功,零表示失败)
[DllImport("Kernel32.dll")]
public static extern long WritePrivateProfileString(string strAppName, string strKeyName, string strKeyValue, string strFileName);

/// <summary>
/// 返回该配置文件中所有Section名称的集合
/// </summary>
/// <returns></returns>
public List<string> ReadSections(string file)
{
byte[] buffer = new byte[65535];
int rel = GetPrivateProfileSectionNamesA(buffer, buffer.GetUpperBound(0), file);
int iCnt, iPos;
List<string> arrayList = new List<string>();
string tmp;
if (rel > 0)
{
iCnt = 0; iPos = 0;
for (iCnt = 0; iCnt < rel; iCnt++)
{
if (buffer[iCnt] == 0x00)
{
tmp = System.Text.ASCIIEncoding.Default.GetString(buffer, iPos, iCnt - iPos).Trim();
iPos = iCnt + 1;
if (tmp != "")
arrayList.Add(tmp);
}
}
}
return arrayList;
}



/// <summary>
/// 读取指定节点下的指定key的value返回string
/// </summary>
/// <param name="section"></param>
/// <param name="key"></param>
/// <returns></returns>
public string ReadIniKey(string section, string key, string file)
{
if (section.Trim().Length <= 0 || key.Trim().Length <= 0) return string.Empty;
StringBuilder strTemp = new StringBuilder(256);
GetPrivateProfileString(section, key, string.Empty, strTemp, 256, file);
return strTemp.ToString().Trim();
}
/// <summary>
/// 往指定section的key中写入value
/// </summary>
/// <param name="section"></param>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public bool WriteIniKey(string section, string key, string value, string file)
{
bool flag;
try
{
if (section.Trim().Length <= 0 || key.Trim().Length <= 0 || value.Trim().Length <= 0)
{
flag = false;
}
else
{

if (WritePrivateProfileString(section, key, value, file) == 0)
{
flag = false;
}
else
{
flag = true;
}
}
}
catch
{
flag = false;
}
return flag;
}

public string iniFile = @"D:\Studio\Visual Studio 2010\Projects\Test\WinFormTest\bin\Debug\test.ini";

#endregion

private void Form1_Load(object sender, EventArgs e)
{
LoadINI();
}
private void LoadINI()
{
List<string> iniList = ReadSections(iniFile);
listView1.Items.Clear();
ListViewItem lvItem;
foreach (string item in iniList)
{
string wpmc = ReadIniKey(item, "WPMC", iniFile);
string clfs = ReadIniKey(item, "CLFS", iniFile);
lvItem = new ListViewItem(wpmc);
lvItem.SubItems.Add(clfs);
lvItem.Tag = item + "," + clfs;
listView1.Items.Add(lvItem);

}

}

private void listView1_DoubleClick(object sender, EventArgs e)
{
string item = listView1.SelectedItems[0].Tag.ToString().Split(',')[0];
string clfs = listView1.SelectedItems[0].Tag.ToString().Split(',')[1];
WriteIniKey(item, "CLFS", clfs == "销毁" ? "不销毁" : "销毁", iniFile);
LoadINI();
}

INI文件:

exception92 2018-01-16
  • 打赏
  • 举报
回复
datagridview也是可以的,处理它相应的类似CellClick事件,保存到文件的File,StreamWriter等类了解一下。自己写例子去吧
qq_21238201 2018-01-16
  • 打赏
  • 举报
回复
能写个例子给我吗???????
qq_21238201 2018-01-16
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
listview控件就可以实现。
具体怎么设置呢???
threenewbee 2018-01-15
  • 打赏
  • 举报
回复
listview控件就可以实现。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧