/// <summary> /// Sort elements by name and display them in the data grid view /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnCharSymbols_Click(object sender, EventArgs e) { var finalElements = from q in PeriodicTable.GetAllElements() orderby q.Symbol select q; //Show data binder.DataSource = finalElements; }
/// <summary> /// Sort elements by Atomic mass and display them in the data grid view /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSortAtomic_Click(object sender, EventArgs e) { var finalElements = from q in PeriodicTable.GetAllElements() orderby q.AtomicMass select q; //Show data binder.DataSource = finalElements; }
/// <summary> /// Default blank display /// </summary> private void Blank() { UI_btnCharSymbols.Enabled = true; UI_btnSortAtomic.Enabled = true; UI_btnSortName.Enabled = true; binder.DataSource = PeriodicTable.GetAllElements(); UI_labelFeedback.Text = ""; UI_txbxMolarMassOut.Text = "Enter formula"; UI_txbxMolarMassOut.ForeColor = Color.Black; }
//Process input string to dictionary keyed by element, value is total count public Dictionary <Element, int> GetElements() { Dictionary <Element, int> elementCount = new Dictionary <Element, int>(); /* * Split string into valid matches including: * -Must have upper case letter * -Optional lower case letter * -Optional number * -Optional two digit number */ var segments = from n in Regex.Split(sRawInput, @"([A-Z][a-z]\d+)|([A-Z][a-z])|([A-Z]\d+)|([A-Z])") where !n.Length.Equals(0) select n; //Process valid matches into their separate parts using regular expressions, if there is no number then then count is 1, create groups based on unique string identifiers var rawGrouping = from q in segments select new { Symbol = Regex.Match(q, @"([A-Z][a-z]|[A-Z])").Value, Count = string.IsNullOrEmpty(Regex.Match(q, @"\d+").Value) ? 1 : int.Parse(Regex.Match(q, @"\d+").Value) } into r group r by r.Symbol; sValid.Clear(); sInvalid.Clear(); foreach (var selection in rawGrouping) { //Only build the dictionary from valid elements if (PeriodicTable.ElementExists(selection.Key)) { sValid.Add(selection.Key); int sum = 0; //Add up the sums of each subgrouping foreach (var item in selection) { sum += item.Count; } elementCount.Add(PeriodicTable.GetElement(selection.Key), sum); } else { sInvalid.Add(selection.Key); } } return(elementCount); }